对于每个物品,如果购买,价值为A[i]*x+B[i]的背包问题。

  先写了一发是WA的= =。代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <set>
using namespace std;
typedef pair<int,int> pii; pii dp[];
int w[],A[],B[]; int main()
{
int T;scanf("%d",&T);
while(T--)
{
int m,n;scanf("%d%d",&m,&n);
for(int i=;i<=n;i++) scanf("%d%d%d",w+i,A+i,B+i);
for(int i=;i<=m;i++) dp[i] = pii(,);
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++) dp[j] = pii(dp[j].first, );
for(int j=w[i];j<=m;j++)
{
if(dp[j-w[i]].first + A[i] + (dp[j-w[i]].second == ? B[i] : ) > dp[j].first)
{
dp[j].first = dp[j-w[i]].first + A[i] + (dp[j-w[i]].second == ? B[i] : );
dp[j].second = ;
}
}
}
printf("%d\n",dp[m].first);
}
return ;
}

  

  正解是,先跑一遍价值为A[i]+B[i]的01背包,再跑一遍价值为A[i]完全背包。所以上面的代码错了大概是因为,这两个背包的第二个for的方向是不同的,没办法一起跑吧(除非用另外一组变量记录下到前一个为止的dp值,然后就可以同时跑了)。。对背包问题的理解还是不够深啊。。

————————————————————————————————————————————————————————

  想了一下,感觉上面说的括号里的再用一个数组记录的方法貌似不太对。。虽然那份代码AC了- -。。反正跑两遍的方法肯定是对的。。我说的是这个博客里面的第二个方法:http://www.cnblogs.com/wmxl/p/4749780.html。也有可能是我对完全背包的理解不够深刻。。先放着再说好了。。

————————————————————————————————————————————————————————

  AC代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <set>
using namespace std;
typedef pair<int,int> pii; int dp[];
int w[],A[],B[]; int main()
{
int T;scanf("%d",&T);
while(T--)
{
int m,n;scanf("%d%d",&m,&n);
for(int i=;i<=n;i++) scanf("%d%d%d",w+i,A+i,B+i);
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=m;j>=w[i];j--) dp[j] = max(dp[j], dp[j-w[i]] + A[i] + B[i]);
for(int j=w[i];j<=m;j++) dp[j] = max(dp[j], dp[j-w[i]] + A[i]);
}
printf("%d\n",dp[m]);
}
return ;
}

HDU 5410 CRB and His Birthday ——(完全背包变形)的更多相关文章

  1. hdu 5410 CRB and His Birthday(混合背包)

    Problem Description Today is CRB's birthday. His mom decided to buy many presents for her lovely son ...

  2. hdu 5410 CRB and His Birthday 01背包和全然背包

    #include<stdio.h> #include<string.h> #include<vector> #include<queue> #inclu ...

  3. HDU 5410 CRB and His Birthday(完全背包变形)

    CRB and His Birthday Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Oth ...

  4. HDU 5410 CRB and His Birthday (01背包,完全背包,混合)

    题意:有n种商品,每种商品中有a个糖果,如果买这种商品就送多b个糖果,只有第一次买的时候才送.现在有m元,最多能买多少糖果? 思路:第一次买一种商品时有送糖果,对这一次进行一次01背包,也就是只能买一 ...

  5. HDU 5410 CRB and His Birthday

    题目大意: 一个人要去买礼物,有M元.有N种礼物,每件礼物的价值是Wi, 你第i件礼物买k个 是可以得到 Ai * k + Bi 个糖果的. 问怎么才能使得你得到的糖果数目最多.   其实就是完全背包 ...

  6. HDU 5410(2015多校10)-CRB and His Birthday(全然背包)

    题目地址:HDU 5410 题意:有M元钱,N种礼物,若第i种礼物买x件的话.会有Ai*x+Bi颗糖果,现给出每种礼物的单位价格.Ai值与Bi值.问最多能拿到多少颗糖果. 思路:全然背包问题. dp[ ...

  7. HDU 2159 FATE(二维费用背包)

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  8. HDU 1712 ACboy needs your help(包背包)

    HDU 1712 ACboy needs your help(包背包) pid=1712">http://acm.hdu.edu.cn/showproblem.php? pid=171 ...

  9. HDU 2639 Bone Collector II(01背包变形【第K大最优解】)

    Bone Collector II Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...

随机推荐

  1. Git 版本库添加空目录方法

    直接在版本库工作目录下创建空目录后,使用git status查看,发现空目录没有被版本库识别. 正确的添加空目录的方法: 在空目录下创建.gitkeep文件:touch .gitkeep 然后重新执行 ...

  2. MD5 32位 小写加密和大写加密

    /** * MD5加密方法 */ public static String MD5(String str) { MessageDigest md5 = null; try { md5 = Messag ...

  3. 返回值优化(RVO)

    C++的函数中,如果返回值是一个对象,那么理论上它不可避免的会调用对象的构造函数和析构函数,从而导致一定的效率损耗.如下函数所示: A test() { A a; return a; } 在test函 ...

  4. unity游戏在logcat中过滤一些不需要的Log

    adb logcat | grep -v "UnityEngineDebug.cpp\|:\s*$" | grep Unity 意义: 1. grep -v "过滤条件1 ...

  5. 流量咪教你挖到5G免费流量

    自从出现了“抢红包”这个伟大的发明,身边的小伙伴们人人都练就了“左手右手一个快动作”的技能.然而,抢红包只有反应快还不够,还要避免下面这样的悲剧! 为了避免各位小主,因为流量不足而输在抢红包的起跑线上 ...

  6. <select> 标签使用

    jQuery获取Select选择的Text和Value: 1. var checkText=jQuery("#select_id").find("option:selec ...

  7. Delegate, Method as Parameter.

    代理, 将方法作为另一方法的参数. 类似C里面的函数指针. using System; using System.Windows.Forms; using System.Threading; name ...

  8. Python之MySQL操作及Paramiko模块操作

    一.MySQL简介   MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下公司.MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQ ...

  9. scrollbar_test

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  10. 表中排序ID断开重排

    客户需要排序ID和页面的问题序号一致,以前删除过一些问题导致order_id 中间有些断开的. 业务表 T_QUESTION order_id question_id  custom_id --1.创 ...