HDU 1114 完全背包问题

题意:有一个存钱罐,空罐时的重量是e,满罐时的重量是f,现在有n种硬币,每一种有无限个,现在给出每一种硬币的价值p和重量w,问存钱罐中最少钱,输出最小钱,否则输出...

思路:变形的完全背包问题,只是求最小值

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<cmath>
 4 #include<iostream>
 5 #include<algorithm>
 6 using namespace std;
 7 const int qq=500+50;
 8 const int MAX=1e5;
 9 int weight[qq],value[qq],dp[MAX];
10 int main()
11 {
12     int t;scanf("%d",&t);
13     while(t--){
14         int e,f;scanf("%d %d",&e,&f);//e是空罐的重量 f是满罐时的重量 
15         int p=f-e;        // p是硬币所占的重量、 
16         int n;scanf("%d",&n);
17         for(int i=1;i<=n;++i)
18             scanf("%d %d",&value[i],&weight[i]);    // 价值、重量
19         for(int i=1;i<=p;++i)
20             dp[i]=99999999;            //初始化最大值、 一定要是原数据达不到的值 
21         dp[0]=0;                // 这里也一定要写出来、不然也会WA 
22         for(int i=1;i<=n;++i)
23             for(int j=weight[i];j<=p;++j)
24                 dp[j]=min(dp[j],dp[j-weight[i]]+value[i]);
25         if(dp[p]!=99999999)
26             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[p]);
27         else
28             printf("This is impossible.\n");
29     }
30     return 0;
31 }

 

刚开始没注意dp数组的大小、   不断的TLM  最后发现直接给了自己一巴掌、  多么痛的领悟

后来又发现e,f范围很大、然而给出的MAX 又不够大、 又是一堆WA、

一直在强调自己的读题、然而还是出了这么的错误、

真是一个大写的懵比、

 

posted @ 2016-03-01 16:38  我不萌、我要高冷  阅读(324)  评论(0编辑  收藏  举报