POJ 1384 Piggy-Bank 完全背包
完全背包
这里要装满,所以
要注意dp初始化:
dp[0]=0;
当求背包最小值时dp[i]=INF(无穷大) (1<=i<=n);
反之 dp[i]= -INF(无穷小) (1<=i<=n);
View Code
#include<stdio.h> #include<string.h> #include<algorithm> #define INF 1000000000 using namespace std; int dp[10003],p[503],w[503]; int main() { int cas,i ,j, m, n, x, y; scanf("%d",&cas); while(cas--) { scanf("%d%d",&x,&y); m=y-x; scanf("%d",&n); for(i=1;i<=n;i++) scanf("%d%d",&p[i],&w[i]); for(i=1;i<=m;i++)dp[i]=INF; //注意初始化 dp[0]=0; for(i=1;i<=n;i++) { for(j=w[i];j<=m;j++) dp[j]=min(dp[j],dp[j-w[i]]+p[i]); } if(dp[m]==INF)puts("This is impossible."); else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]); } return 0; }


浙公网安备 33010602011771号