HDU 5410 CRB and His Birthday (01背包,完全背包,混合)
2024-09-01 13:19:59
题意:有n种商品,每种商品中有a个糖果,如果买这种商品就送多b个糖果,只有第一次买的时候才送。现在有m元,最多能买多少糖果?
思路:第一次买一种商品时有送糖果,对这一次进行一次01背包,也就是只能买一次。然后对这种商品来一次完全背包,此时不送糖果,也可以多买。
#include <bits/stdc++.h>
#define pii pair<int,int>
#define INF 0x7f7f7f7f
#define LL long long
using namespace std;
const int N=;
LL dp[N];
int n, m, w[N], a[N], b[N]; LL cal()
{
memset(dp, , sizeof(dp));
for(int i=; i<=n; i++) //礼物
{
for(int j=m; j-w[i]>=; j--) //先来一次01背包
{
if( dp[j-w[i]]+ a[i] + b[i] > dp[j] )
dp[j]=dp[j-w[i]]+ a[i] + b[i] ;
}
for(int j=; j+w[i]<=m; j++) //再来一次完全背包
{
if( dp[j+w[i]] < dp[j]+a[i] )
dp[ j+w[i] ] = dp[j]+a[i] ;
}
}
LL sum=-;
for(int i=m; i>; i--) sum=max(sum, dp[i]);
return sum;
} int main()
{
freopen("input.txt", "r", stdin);
int t;
cin>>t;
while(t--)
{
scanf("%d %d", &m, &n);
for(int i=; i<=n; i++) scanf("%d%d%d",&w[i], &a[i], &b[i]);
printf("%lld\n", cal());
} return ;
}
AC代码
最新文章
- iOS - UISwitch
- r2d_01
- Singleton设计模式 分类: 设计模式 2014-12-03 17:54 59人阅读 评论(0) 收藏
- 数学概念——F 概率(经典问题)birthday paradox
- 转: ajax跨域之JSONP
- 4.在浏览器中解析XML
- HTTP请求范例
- Beta阶段敏捷冲刺每日报告——Day0
- UOJ #311「UNR #2」积劳成疾
- samba企业级实战应用详解-技术流ken
- html/css的学习之路(2)
- Android通过Chrome Inspect调试WebView的H5 App出现空白页面的解决方法(不需要FQ)
- LeetCode算法题-Number of 1 Bits(Java实现)
- Mac支持ntfs格式的移动硬盘读写操作
- IntelliJ IDEA(四) :Settings(上)
- Date——时间戳转化为YYYY-MM-DD h:m:s时间格式
- Android-PullToRefresh 下拉刷新增加setOnItemLongClickListener
- 使用UIkit的uk-form-icon后input框无法输入的问题
- 安装了nodejs后在命令行运行npm报错:Error: Cannot find module &#39;internal/util/types&#39;
- 【转载】oracle索引详解2
热门文章
- [AHOI 2006] 上学路线
- linux--vsftpd的安装和配置(转)
- bzoj 1510 Kra-The Disks —— 思路
- Git分布式版本控制工具
- hibernate的基础学习
- Codeforces - 909C - Python Indentation - 简单dp
- python 类对象和实例对象动态添加方法
- logrotate日志转储
- queue+模拟 Codeforces Round #304 (Div. 2) C. Soldier and Cards
- 使用PlSQLDeveloper工具查询Oracle会话数