标签:
如果可以每个物品拿多件,则从小到大遍历,否则从大到小遍历。
Description
Input
Output
Sample Input
Sample Output
#include<bits/stdc++.h> using namespace std; struct Node { int pan,wei; }coin[505]; int dp[10005]; int main() { int t; scanf("%d",&t); while(t--) { int e,f; scanf("%d%d",&e,&f); int n; scanf("%d",&n); for(int i=0;i<n;i++) { scanf("%d%d",&coin[i].pan,&coin[i].wei); } for(int i=0;i<10005;i++) dp[i]=1000005; //cout<<dp[1003]; dp[0]=0; for(int i=0;i<n;i++) { for(int j=coin[i].wei;j<=f-e;j++) dp[j]=min(dp[j],dp[j-coin[i].wei]+coin[i].pan); } if(dp[f-e]<1000005) { printf("The minimum amount of money in the piggy-bank is %d.\n",dp[f-e]); } else printf("This is impossible.\n"); } }
装态转移方程:dp[j]=min(dp[j],dp[j-coni[i].wei]+coin[i].pan);dp[j]表示在重量为j的时候所能取得的最小的钱数。
标签:
原文地址:http://www.cnblogs.com/superxuezhazha/p/5338445.html