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;
}

浙公网安备 33010602011771号