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