POJ 1384 Piggy-Bank 完全背包

来源:互联网 发布:vc高级编程 编辑:程序博客网 时间:2024/04/29 22:45

完全背包 

这里要装满,所以

 

要注意dp初始化:

dp[0]=0;

当求背包最小值时dp[i]=INF(无穷大) (1<=i<=n);

反之   dp[i]= -INF(无穷小) (1<=i<=n);

View Code
#include<stdio.h>#include<string.h>#include<algorithm>#define INF 1000000000using namespace std;int dp[10003],p[503],w[503];int main(){    int cas,i ,j, m, n, x, y;    scanf("%d",&cas);    while(cas--)    {         scanf("%d%d",&x,&y);         m=y-x;         scanf("%d",&n);         for(i=1;i<=n;i++)             scanf("%d%d",&p[i],&w[i]);         for(i=1;i<=m;i++)dp[i]=INF;  //注意初始化         dp[0]=0;         for(i=1;i<=n;i++)         {             for(j=w[i];j<=m;j++)                 dp[j]=min(dp[j],dp[j-w[i]]+p[i]);         }         if(dp[m]==INF)puts("This is impossible.");         else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[m]);    }    return 0;}

 

原创粉丝点击