暑期dp46道(17)--HDOJ1114 Piggy Bank 完全背包

来源:互联网 发布:国外windows优化软件 编辑:程序博客网 时间:2024/03/29 02:57

题目链接:HDOJ 1114




这题提议很好理解,就是给定coins的weight和不同种类的coins,求组合成这个weight最小的价值,若不能组合,输出"This is impossible.";


题解:裸完全背包问题。不过是求装满背包而且要最小,所以还不算太裸;(max->min)

dp[0] = 0;其他初始化最大值,判断dp[weight];若为初始值则无法组合,否则就输出。


代码:

#include<cstdio>#include<cstring>#include<string>#include<algorithm>#define debug 0#define Min(a,b) ((a<b)?a:b)#define INF 0x3fffffff  using namespace std;const int maxn = 10000+5;int c[505],w[505],v,n;int dp[maxn];int main(){#if debugfreopen("in.txt","r",stdin);#endif//debug    int T,a,b;        scanf("%d",&T);    while(T--){        scanf("%d%d",&a,&b);        v = b - a;                for(int i = 0;i <= v;i++)  dp[i] = INF;        dp[0] = 0;             scanf("%d",&n);        for(int i = 1;i <= n;i++)            scanf("%d%d",&w[i],&c[i]);                     for(int i = 1;i <= n;i++)            for(int j = c[i];j <= v;j++)                dp[j] = min(dp[j],dp[j-c[i]] + w[i]);//完全背包                         if(dp[v] == INF)            printf("This is impossible.\n");        else            printf("The minimum amount of money in the piggy-bank is %d.\n",dp[v]);    }    return 0;}


0 0
原创粉丝点击