poj 1252 完全背包

看了别人的,就不讲了

#include<stdio.h>
#include<string.h>
int dp[10000];
int a[6];
int min(int a,int b)
{
	if(a==-1)return b;
	return a<b?a:b;
}
int main()
{
	int T;
	while(scanf("%d",&T)!=EOF)
	{
		while(T--){
			int i,j;
			int upper = 0;
			for(i=0;i<6;i++)
				scanf("%d",&a[i]);
			upper= 10000;
			memset(dp,-1,sizeof(dp));
			dp[0]=0;
			for(i=0;i<6;i++) //付钱
			{
				for(j=a[i];j<upper;j++)
				{
					if(dp[j-a[i]]!=-1)
						dp[j]=min(dp[j],dp[j-a[i]]+1);
				}
			}
			for(i=0;i<6;i++)//找钱
			{
				for(j=upper-a[i];j>=0;j--)
					if(dp[a[i]]!=-1&&dp[j+a[i]]!=-1)
						dp[j]=min(dp[j],dp[j+a[i]]+1);
			}
			__int64 ans = 0;
			__int64 bigger = dp[1];
			for(i=1;i<=100;i++)
			{
				ans+=dp[i];
				if(dp[i]>bigger)bigger=dp[i];
			}
			printf("%.2lf %d\n",ans/100.0,bigger);
		}
	}
	return 0;
}

  

posted @ 2011-11-19 17:11  Because Of You  Views(261)  Comments(0Edit  收藏  举报