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.\n");

31         else

32             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);

33     }

34     return 0;

35 }
View Code

 

你可能感兴趣的:(pig)