HDU 1114 Piggy-Bank (完全背包)

来源:互联网 发布:txt免费全本小说软件 编辑:程序博客网 时间:2024/05/22 01:38

OJ题目 : click here ~~

题意分析:就是一个简单的完全背包问题。完全背包与01背包只有重量的循环次序不同。01背包是从大到小,完全背包相反。有的题目要求“恰好装满背包” 时的最优解, 有的则并没有要求必须把背包装满。一种区别这两种问法的实现方法是在初始化时有所不同。要求恰好装满背包,那么在初始化时dp[ 0 ] 为 0 ,其他设为-inf (求最大),inf(求最小)。如果并没有要求装满,而是只希望价格尽量大,初始化时应该将dp[ i ]全部设为 0 。

AC_CODE

int E , F , N , P[502] , W[502];const int inf = 100000000;int dp[10002];int main(){        int t;        cin >> t;        while(t--)        {            scanf("%d%d%d",&E ,&F, &N);            F -= E;            int i , j;            for(i = 1;i <= N;i++)            {                scanf("%d%d",&P[i],&W[i]);            }            for(i = 1;i <= F;i++)                dp[i] = inf;//如果是求最大价值,赋值为-inf            dp[0] = 0;//恰好装满            for(i = 1;i <= N;i++)                for(j = W[i];j <= F;j++)//因为是完全背包,所以重量从小到大,与01背包相反                dp[j] = min(dp[j] , dp[j - W[i]] + P[i]);//求最小价值            if(dp[F] == inf) printf("This is impossible.\n");            else printf("The minimum amount of money in the piggy-bank is %d.\n",dp[F]);        }        return 0;}


0 0
原创粉丝点击