hdu5410(dp)
来源:互联网 发布:淘宝小号哪里有卖 编辑:程序博客网 时间:2024/06/02 05:52
http://acm.hdu.edu.cn/showproblem.php?pid=5410
CRB and His Birthday
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 2077 Accepted Submission(s): 978
Problem Description
Today is CRB's birthday. His mom decided to buy many presents for her lovely son.
She went to the nearest shop withM Won(currency unit).
At the shop, there areN kinds of presents.
It costsWi Won to buy one present of i -th kind. (So it costs k × Wi Won to buy k of them.)
But as the counter of the shop is her friend, the counter will giveAi × x + Bi candies if she buys x (x >0) presents of i -th kind.
She wants to receive maximum candies. Your task is to help her.
1 ≤T ≤ 20
1 ≤M ≤ 2000
1 ≤N ≤ 1000
0 ≤Ai, Bi ≤ 2000
1 ≤Wi ≤ 2000
She went to the nearest shop with
At the shop, there are
It costs
But as the counter of the shop is her friend, the counter will give
She wants to receive maximum candies. Your task is to help her.
1 ≤
1 ≤
1 ≤
0 ≤
1 ≤
Input
There are multiple test cases. The first line of input contains an integer T , indicating the number of test cases. For each test case:
The first line contains two integersM and N .
ThenN lines follow, i -th line contains three space separated integers Wi , Ai and Bi .
The first line contains two integers
Then
Output
For each test case, output the maximum candies she can gain.
Sample Input
1100 210 2 120 1 1
Sample Output
21HintCRB's mom buys 10 presents of first kind, and receives 2 × 10 + 1 = 21 candies.
题意:有m元和n件物品,第i件物品的价格为w[i],价值为k*a[i]+b[i](k为购买件数),求最大价值
题解:相当与一件物品,第一次购买的价值为a[i]+b[i],之后他的价值就变为a[i],
对于a[i]+b[i]的情况做一次01背包,对于a[i]的情况做一次完全背包dp[m]就是答案。
dp[i]:i元情况下所能购得的最大价值。
代码:
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;int t,m,n;int dp[2005];int w[2005],a[2005],b[2005];int main(){while(~scanf("%d",&t)){while(t--){memset(dp,0,sizeof(dp));scanf("%d%d",&m,&n);for(int i=1;i<=n;i++){scanf("%d%d%d",&w[i],&a[i],&b[i]);}//01背包for(int i=1;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 i=1;i<=n;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 0;}
阅读全文
0 0
- hdu5410 dp
- hdu5410(dp)
- hdu5410
- 2015 多校联赛 ——HDU5410(dp)
- hdu5410 CRB and His Birthday
- HDU5410 CRB and His Birthday
- HDU5410-CRB and His Birthday
- hdu5410 完全背包+01背包
- hdu5410(01背包+完全背包)
- hdu5410 CRB and Birthday(背包)
- HDU5410--01背包+完全背包
- 混合背包 hdu5410 CRB and His Birthday
- hdu5410(完全背包的依赖)
- HDU5410 CRB and His Birthday(混合背包)
- HDU5410(01背包+完全背包)
- hdu5410~CRB and His Birthday(01背包+完全背包)
- hdu5410(2015多校10)--CRB and His Birthday(背包问题)
- dp
- Caused by: java.lang.ClassNotFoundException: com.mchange.v2.log.MLog
- div中的内容垂直居中的五种方法
- Win7注册表写入失败怎么办?Win7写入注册表失败的解决方法
- 知彼--Java初级岗位竞争对手分析
- linux防火墙关闭
- hdu5410(dp)
- 一张图看明白GPU原理
- 虚拟机网络连接方式详解
- Linux分区详解
- Python爬虫开源软件工具
- 一张图看明白响应式和自适应的区别
- getServletPath与getRequestURI
- Linux目录结构详解
- SWAP分区详解