hdu 5410 CRB and His Birthday(动态规划)
来源:互联网 发布:php 获取网页内容 编辑:程序博客网 时间:2024/04/28 19:20
题目:
CRB and His Birthday
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 748 Accepted Submission(s): 395
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 integerT , 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.
Author
KUT(DPRK)
Source
2015 Multi-University Training Contest 10
Recommend
wange2014
题意:给了N种礼物,总共M块钱,每件礼物W【i】元,买x个第i种礼物可以得到A[I]*x+B[i]个糖果,问最多能得到多少糖果。
思路:看起来像完全背包,但有一些不同,完全背包是第i种物品的价值为P[i],也就是说买x个第i种物品能得到x*p[i]的价值,而这里是A[I]*x+B[i],所以要分是否是第一次买这个礼物,如果是第一次,那么增加的价值是A[i]+B[i],否则增加A[i].设dp[i][j][0]代表有j元钱,并且现在不买第i物品,dp[i][j][1]代表买这个物品,那么dp[i][j][0]=max(dp[i-1][j][0],dp[i-1][j][1]),dp[i][j][1]=max(dp[i][j-w[i]][0]+A[i]+B[i],dp[i][j-w[i]][1]+A[i]).
代码:
#include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include<climits>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <sstream>#include <map>#include <set>#include <queue>#include <stack>#include <fstream>#include <numeric>#include <iomanip>#include <bitset>#include <list>#include <stdexcept>#include <functional>#include <utility>#include <ctime>using namespace std;#define PB push_back#define MP make_pair#define REP(i,x,n) for(int i=x;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define FORD(i,h,l) for(int i=(h);i>=(l);--i)#define SZ(X) ((int)(X).size())#define ALL(X) (X).begin(), (X).end()#define RI(X) scanf("%d", &(X))#define RII(X, Y) scanf("%d%d", &(X), &(Y))#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))#define DRI(X) int (X); scanf("%d", &X)#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)#define OI(X) printf("%d",X);#define RS(X) scanf("%s", (X))#define MS0(X) memset((X), 0, sizeof((X)))#define MS1(X) memset((X), -1, sizeof((X)))#define LEN(X) strlen(X)#define F first#define S second#define Swap(a, b) (a ^= b, b ^= a, a ^= b)#define Dpoint strcut node{int x,y}#define cmpd int cmp(const int &a,const int &b){return a>b;} /*#ifdef HOME freopen("in.txt","r",stdin); #endif*/const int MOD = 1e9+7;typedef vector<int> VI;typedef vector<string> VS;typedef vector<double> VD;typedef long long LL;typedef pair<int,int> PII;//#define HOMEint Scan(){int res = 0, ch, flag = 0;if((ch = getchar()) == '-')//判断正负flag = 1;else if(ch >= '0' && ch <= '9')//得到完整的数res = ch - '0';while((ch = getchar()) >= '0' && ch <= '9' )res = res * 10 + ch - '0';return flag ? -res : res;}/*----------------PLEASE-----DO-----NOT-----HACK-----ME--------------------*/int W[1005],A[1005],B[1005];long long int dp[2005][2];int main(){int T;RI(T);while(T--){ int M,N; RII(M,N); for(int i=1;i<=N;i++) RIII(W[i],A[i],B[i]); MS0(dp); for(int i=1;i<=N;i++) for(int m=0;m<=M;m++) { dp[m][0]=max(dp[m][0],dp[m][1]); if(m>=W[i]) dp[m][1]=max(dp[m-W[i]][0]+A[i]+B[i],dp[m-W[i]][1]+A[i]); else dp[m][1]=0; } printf("%I64d\n",max(dp[M][0],dp[M][1]));} return 0;}
0 0
- hdu 5410 CRB and His Birthday(动态规划)
- hdu 5410 CRB and His Birthday(动态规划,背包问题)
- 动态规划,背包问题,卡题(CRB and His Birthday,HDU 5410)
- CRB and His Birthday(HDU-5410)
- hdu 5410 CRB and His Birthday 2015多校联合训练赛#10 dp 动态规划
- HDU - 5410 CRB and His Birthday
- HDU 5410 CRB and His Birthday
- hdu acm 5410 CRB and His Birthday
- HDU 5410 CRB and His Birthday
- HDU 5410 CRB and His Birthday
- HDU 5410 CRB and His Birthday(DP)
- HDU 5410 CRB and His Birthday(DP)
- hdu 5410 CRB and His Birthday(背包)
- HDU 5410 CRB and His Birthday(01+完全)
- HDU-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完全混合背包
- Intellij IDEA集成开发环境 安装破解
- 不同RAID模式的优缺点
- Git教程
- 在惠普实训的首次班会
- 一个用html写的个人的简历
- hdu 5410 CRB and His Birthday(动态规划)
- 关于在Spring配置文件中解决MySQL重连问题
- Collection View入门
- Poj2429 inverse of LCM&GCD
- JSP技术(一)
- 道歉还是作秀?余佳文现象背后的冷思考
- 新浪微博第三方Android客户端
- 零基础学python-10.1 序列赋值高级应用
- hihocoder1224赛车(树的深度相关)