码迷,mamicode.com
首页 > 其他好文 > 详细

【HDOJ 1005】 CRB and His Birthday

时间:2015-08-20 20:57:39      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:多校

【HDOJ 1005】 CRB and His Birthday


背包 商场卖东西 没件物品有对应的价值 同时由于超市老板跟你是好绩优。。。每买一件物品给你a个糖果 同时如果购买某物品 会给对应的b种糖果 即买x个i 可以得到ai*x+bi个糖果 问怎么能得到最多糖果


开始是想开个bool标记每个状态某糖果买每买 还有在该状态是否第一次买某种糖果 写着写着写不好了……


后来突然想到 可以把每件物品拆开 由于每种物品只赠送一次b 可以把赠b的物品作为"特卖品" 其余为正常送a的物品

这样每个物品特卖品01背包跑一次 普通品完全背包跑一次就行了。。


代码如下:

#include <iostream>
#include <cstring>
#include <cstdio>

using namespace std;

int dp[2001];

int main()
{
    int t,n,m,i,j,w,a,k,b;
    scanf("%d",&t);
    while(t--)
    {
        scanf("%d %d",&m,&n);
        memset(dp,0,sizeof(dp));

        for(i = 1; i <= n; ++i)
        {
            scanf("%d %d %d",&w,&a,&b);
            for(j = m; j >= w; --j)
            {
                dp[j] = max(dp[j-w]+a+b,dp[j]);
            }
            for(j = w; j <= m; ++j)
            {
                dp[j] = max(dp[j-w]+a,dp[j]);
            }
        }
        printf("%d\n",dp[m]);
    }

    return 0;
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

【HDOJ 1005】 CRB and His Birthday

标签:多校

原文地址:http://blog.csdn.net/challengerrumble/article/details/47812567

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!