Piggy-Bank(HDU 1114)背包的一些基本变形

Piggy-Bank  HDU 1114

初始化的细节问题:

因为要求恰好装满!!

所以初始化要注意:

初始化时除了F[0]为0,其它F[1..V]均设为−∞。

又这个题目是求最小价值

则就是初始化时除了F[0]为0,其它F[1..V]均设为∞。

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<string.h>
 5 using namespace std;
 6 const int inf=1000005;
 7 int a[505],b[505],dp[10005];
 8 int main()
 9 {
10     int t,n,n1,m,i,j;
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%d%d",&n,&n1);
15         n=n1-n;
16         scanf("%d",&m);
17         for(i=0;i<m;i++)
18             scanf("%d%d",&a[i],&b[i]);
19         memset(dp,inf,sizeof(dp));
20         dp[0]=0;
21         for(i=0;i<m;i++)
22             for(j=b[i];j<=n;j++)
23             dp[j]=min(dp[j],dp[j-b[i]]+a[i]);
24         if(dp[n]<=inf)
25             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[n]);
26         else
27             printf("This is impossible.\n");
28     }
29     return 0;
30 }

还有:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<algorithm>
 4 #include<string.h>
 5 using namespace std;
 6 const int inf=1000005;
 7 int a[505],b[505],dp[10005];
 8 int main()
 9 {
10     int t,n,n1,m,i,j;
11     scanf("%d",&t);
12     while(t--)
13     {
14         scanf("%d%d",&n,&n1);
15         n=n1-n;
16         scanf("%d",&m);
17         for(i=0;i<m;i++)
18             scanf("%d%d",&a[i],&b[i]);
19         for(i=1;i<=n;i++)
20             dp[i]=inf;
21         dp[0]=0;
22         for(i=0;i<m;i++)
23             for(j=b[i];j<=n;j++)
24             dp[j]=min(dp[j],dp[j-b[i]]+a[i]);
25         if(dp[n]!=inf)
26             printf("The minimum amount of money in the piggy-bank is %d.\n",dp[n]);
27         else
28             printf("This is impossible.\n");
29     }
30     return 0;
31 }

 

 

posted on 2013-08-30 15:52  ~~碾压机  阅读(147)  评论(0编辑  收藏  举报