hdu 5410 CRB and His Birthday(01背包+完全背包)
2017-03-15 20:25
274 查看
CRB and His Birthday
Problem Description
Today is CRB's birthday. His mom decided to buy many presents for her lovely son.
She went to the nearest shop with M Won(currency
unit).
At the shop, there are N kinds
of presents.
It costs Wi 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 give Ai × 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
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 integers M and N.
Then N lines
follow, i-th
line contains three space separated integers Wi, Ai and Bi.
Output
For each test case, output the maximum candies she can gain.
Sample Input
1
100 2
10 2 1
20 1 1
Sample Output
21
HintCRB's mom buys 10 presents of first kind, and receives 2 × 10 + 1 = 21 candies.
Author
KUT(DPRK)
Source
2015 Multi-University Training Contest 10
参考博客:http://blog.csdn.net/keshuai19940722/article/details/47843927
思路:对于每一个礼物,第一次买是01背包,以后再买就是完全背包(因为要保持不论买多少件这个礼物,都只加一次bi)
代码:
总结:一开始以为最多买2000件,所以直接用多重背包写的,可是最后bi却无法保证加到正确的位置上0.0
原来这种包含只加一次和可以加多次的权值的话可以用01背包+完全背包的方法写
Problem Description
Today is CRB's birthday. His mom decided to buy many presents for her lovely son.
She went to the nearest shop with M Won(currency
unit).
At the shop, there are N kinds
of presents.
It costs Wi 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 give Ai × 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
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 integers M and N.
Then N lines
follow, i-th
line contains three space separated integers Wi, Ai and Bi.
Output
For each test case, output the maximum candies she can gain.
Sample Input
1
100 2
10 2 1
20 1 1
Sample Output
21
HintCRB's mom buys 10 presents of first kind, and receives 2 × 10 + 1 = 21 candies.
Author
KUT(DPRK)
Source
2015 Multi-University Training Contest 10
参考博客:http://blog.csdn.net/keshuai19940722/article/details/47843927
思路:对于每一个礼物,第一次买是01背包,以后再买就是完全背包(因为要保持不论买多少件这个礼物,都只加一次bi)
代码:
#include<stdio.h> #include<string.h> #define maxn 2000+10 #define max(a,b) (a>b?a:b) int dp[maxn]; int main() { int t; scanf("%d",&t); while(t--) { memset(dp,0,sizeof(dp)); int m,n; scanf("%d%d",&m,&n); int i,j,w,a,b; for(i=0;i<n;i++) { scanf("%d%d%d",&w,&a,&b); for(j=m;j>=w;j--) dp[j]=max(dp[j],dp[j-w]+a+b); for(j=w;j<=m;j++) dp[j]=max(dp[j],dp[j-w]+a); } int ans=-1; for(i=0;i<=m;i++) ans=max(ans,dp[i]); printf("%d\n",ans); } return 0; }
总结:一开始以为最多买2000件,所以直接用多重背包写的,可是最后bi却无法保证加到正确的位置上0.0
原来这种包含只加一次和可以加多次的权值的话可以用01背包+完全背包的方法写
相关文章推荐
- hdu 5410 CRB and His Birthday 01背包和完全背包
- [HDU 5410]CRB and His Birthday[01、完全背包]
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- hdu5410(完全背包变形)
- hdu 5410 CRB and His Birthday(0-1背包+完全背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- HDU-5410-CRB and His Birthday(01背包+完全背包 better)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- HDU 5410 CRB and His Birthday(01背包+完全背包)
- [hdu 5410 CRB and His Birthday] 完全背包变形
- HDU 5410 CRB and His Birthday(完全背包+01背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- HDU 5410 CRB and His Birthday(完全背包)——多校练习10
- HDU 5410 CRB and His Birthday(完全背包变形)
- hdu5410 完全背包+01背包
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)
- hdu 5410 CRB and His Birthday(01背包+完全背包)