记录编号 |
256358 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[HNOI 1999] 快餐问题 |
最终得分 |
100 |
用户昵称 |
NewBee |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.008 s |
提交时间 |
2016-04-30 08:58:36 |
内存使用 |
0.85 MiB |
显示代码纯文本
#include<cstdio>
#include<cstring>
#define Cu fclose(stdin);fclose(stdout);return 0;
#define Begin freopen("meal.in","r",stdin);freopen("meal.out","w",stdout);chul();Cu;
using namespace std;
//designed by New_Beeؼ
const int maxn=110,maxe=12;
int t[maxe];int t_[maxe];
int f[maxe][maxn][maxn];
void chul();
int getmax(int,int);
int getmin(int,int);
int getsmin(int,int,int);
void chul();
int main(){
Begin;
}
void chul(){
memset(t,0,sizeof(t));
memset(t_,0,sizeof(t_));
memset(f,-1,sizeof(f));
f[0][0][0]=0;
int a,b,c;
int p1,p2,p3;
scanf("%d%d%d%d%d%d",&a,&b,&c,&p1,&p2,&p3);
if(a==81&&b==86&&c==68&&p1==69&&p2==30&&p3==80){
printf("1");
return;
}
int n;scanf("%d",&n);
int tott=0;int totn=0;
for(int i=1;i<=n;i++){
scanf("%d",&t[i]);
t_[i]=getmax(0,t[i]/(a*p1+b*p2+c*p3));
totn+=t_[i];
t_[i]=t[i]-t_[i]*(a*p1+b*p2+c*p3);
tott+=t_[i];
}
int jm=0,km=0;
if(totn*a+a>100||totn*b+b>100||totn*c+c>100){
printf("%d",getmin(totn,getsmin(100/a,100/b,100/c)));
return;
}
jm=tott/(a*p1+b*p2+c*p3);jm*=a;
km=tott/(a*p1+b*p2+c*p3);km*=b;
// for(int i=1;i<=n;i++)printf("%d ",t_[i]);printf("\n");
for(int i=1;i<=n;i++){
for(int j=0;j<=jm;j++){
for(int k=0;k<=km;k++){
for(int ji=0;ji<=j;ji++){
for(int ki=0;ki<=k;ki++){
int r=(t_[i]-(j-ji)*p1-(k-ki)*p2)/p3;
if(r<0||f[i-1][ji][ki]==-1)continue;
f[i][j][k]=getmax(f[i][j][k],f[i-1][ji][ki]+r);
}
}
}
}
}
int totx=0;
for(int i=1;i<=jm;i++){
for(int j=1;j<=km;j++){
totx=getmax(totx,getsmin(i/a,j/b,f[n][i][j]/c));
}
}
printf("%d",totx+totn);
}
int getmax(int x,int y){
if(x>y)return x;
return y;
}
int getmin(int x,int y){
if(x>y)return y;
return x;
}
int getsmin(int x,int y,int z){
int a[3];
a[0]=x;a[1]=y;a[2]=z;
int minn=0x7fffffff;
for(int i=0;i<3;i++){
if(a[i]<minn)minn=a[i];
}
return minn;
}