HDU1114 Piggy-Bank 完全背包

题意:

给出一个存钱罐的空罐时的质量和装了钱之后的质量,再给出一些硬币的质量和相应的价值,问存钱罐里的钱最少可能为多少。

这道题就是完全背包的问题,注意初始化。

完全背包与01背包不同的是第二次遍历的时候要顺序而已。

初始化,这道题要求背包恰好装满,而且要求的值尽量少,所以dp[0]=0;其余设为无穷大。

1.若没有要求恰好装满,则全为0.

2.若要求的值尽量大,则dp[0]=0;其余为无穷小。

 1 #include<cstdio>
 2 #include<algorithm>
 3 using namespace std;
 4 const int maxn=10000+10;
 5 const int inf=0x3f3f3f3f;
 6 int dp[maxn];
 7 int main()
 8 {
 9     int test;
10     scanf("%d",&test);
11     while(test--)
12     {
13         int e,f;
14         scanf("%d%d",&e,&f);
15         int m=f-e;
16         dp[0]=0;
17         for(int i=1;i<=m;i++)
18             dp[i]=inf;
19         int p,w,n;
20         scanf("%d",&n);
21         for(int i=1;i<=n;i++)
22         {
23             scanf("%d%d",&p,&w);
24             for(int j=w;j<=m;j++)
25             {
26                 dp[j]=min(dp[j],dp[j-w]+p);
27             }
28         }
29         if(dp[m]==inf)
30             printf("This is impossible.
");
31         else
32             printf("The minimum amount of money in the piggy-bank is %d.
",dp[m]);
33     }
34     return 0;
35 }
View Code
原文地址:https://www.cnblogs.com/-maybe/p/4380867.html