poj 1384 完全背包
完全背包,注意初始化的细节dp【0】=0;
这道题要求的是恰好装满背包的最小的价值,所以初始状态下,只有dp[0]满足条件,即容量为0的背包可能被价值为0的东西(即木有东西)装满背包,其他容量的背包均没有合法解,都是无穷大,之所以是恰好装满是因为贮蓄罐的增重是一定的
#include<stdio.h> #include<string.h> int dp[10000]; int w[505],v[505]; int min(int a,int b){return a<b?a:b;} int main(){ int t,e,f,i,j,k,n; scanf("%d",&t); while(t--){ scanf("%d%d",&e,&f); scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&v[i],&w[i]); int V=f-e; for(i=1;i<=V;i++) dp[i]=10000000; dp[0]=0; for(i=1;i<=n;i++){ for(j=0;j<=V;j++){ if(j>=w[i]) dp[j]=min(dp[j-w[i]]+v[i],dp[j]); } } if(dp[V]!=10000000) printf("The minimum amount of money in the piggy-bank is %d.\n",dp[V]); else printf("This is impossible.\n"); } }