博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 5410(2015多校10)-CRB and His Birthday(全然背包)
阅读量:5046 次
发布时间:2019-06-12

本文共 1231 字,大约阅读时间需要 4 分钟。

题目地址:

题意:有M元钱,N种礼物,若第i种礼物买x件的话。会有Ai*x+Bi颗糖果,现给出每种礼物的单位价格、Ai值与Bi值。问最多能拿到多少颗糖果。
思路:全然背包问题。
dp[j][1]在当前物品时花钱为j的而且买过当前物品的最大值。
dp[j][0]不买当前这件物品此前花钱为j的的最大值。
每种物品的价值随Ai线性变化,可是不随B[i]线性变化。B[i]仅是在第一次挑选第i件物品是才算入,其它时候均不算入。

所以我们能够写出状态转移方程:

dp[j][0]=max(dp[j][1],dp[j][0]);
dp[j][1]=max(dp[j-q[i].w][0]+q[i].a+q[i].b,dp[j-q[i].w][1]+q[i].a);

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#pragma comment(linker, "/STACK:102400000,102400000")using namespace std;typedef long long LL;const int inf=0x3f3f3f3f;const double pi= acos(-1.0);const double esp=1e-7;const int Maxn=2010;struct node{ int a,b,w;}q[Maxn];int dp[Maxn][2];int main(){ int T,n,m,i,j; scanf("%d",&T); while(T--){ scanf("%d %d",&m,&n); for(i=1;i<=n;i++) scanf("%d %d %d",&q[i].w,&q[i].a,&q[i].b); memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++){ for(j=0;j<=m;j++){ dp[j][0]=max(dp[j][1],dp[j][0]); if(j>=q[i].w) dp[j][1]=max(dp[j-q[i].w][0]+q[i].a+q[i].b,dp[j-q[i].w][1]+q[i].a); } } printf("%d\n",max(dp[m][0],dp[m][1])); } return 0;}

转载于:https://www.cnblogs.com/gccbuaa/p/7080419.html

你可能感兴趣的文章
Cocos2d-x3.0 文件处理
查看>>
全面整理的C++面试题
查看>>
Activity和Fragment生命周期对比
查看>>
OAuth和OpenID的区别
查看>>
android 分辨率自适应
查看>>
查找 EXC_BAD_ACCESS 问题根源的方法
查看>>
国外媒体推荐的5款当地Passbook通行证制作工具
查看>>
日常报错
查看>>
list-style-type -- 定义列表样式
查看>>
hibernate生成表时,有的表可以生成,有的却不可以 2014-03-21 21:28 244人阅读 ...
查看>>
mysql-1045(28000)错误
查看>>
Ubuntu 编译出现 ISO C++ 2011 不支持的解决办法
查看>>
1.jstl c 标签实现判断功能
查看>>
Linux 常用命令——cat, tac, nl, more, less, head, tail, od
查看>>
超详细的Guava RateLimiter限流原理解析
查看>>
VueJS ElementUI el-table 的 formatter 和 scope template 不能同时存在
查看>>
Halcon一日一练:图像拼接技术
查看>>
Swift - RotateView
查看>>
iOS设计模式 - 中介者
查看>>
centos jdk 下载
查看>>