记录编号 256358 评测结果 AAAAAAAAAA
题目名称 [HNOI 1999] 快餐问题 最终得分 100
用户昵称 GravatarNewBee 是否通过 通过
代码语言 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;
}