poj 1384完全背包
题意:给出猪罐子的空质量和满质量,和n个硬币的价值和质量,求猪罐子刚好塞满的的最小价值。
思路:选择硬币,完全背包问题,塞满==初始化为无穷,求最小价值,min。
代码:
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define inf 10000000 int n,sum,empty,full,T; int v[600],w[600],dp[10050]; int main() { scanf("%d",&T); while(T--) { scanf("%d%d",&empty,&full); scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&v[i],&w[i]); } sum=full-empty; for(int i=0;i<=sum;i++) { dp[i]=inf; } dp[0]=0; for(int j=0;j<n;j++) { for(int k=0;k<=sum;k++) { if(k>=w[j]) { dp[k]=min(dp[k],dp[k-w[j]]+v[j]); } } } if(dp[sum]==inf) printf("This is impossible.\n"); else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[sum]); } return 0; }