您的位置:首页 > 其它

完全背包变型题(hdu5410)

2015-09-05 14:40 225 查看
这是2015年最后一场多校的dp题,当时只怪自己基础太差,想了1个多小时才想出来,哎,9月份好好巩固基础,为区域赛做准备。题目传送门

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 2000 + 5;

int T, n, m;

int p
, a
, b
;

int vis

, dp

;

void work(){
memset(dp, 0, sizeof(dp));
memset(vis, 0, sizeof(vis));
for(int i = 1; i <= n; i ++){
for(int j = 0; j <= m; j ++){
dp[i][j] = dp[i - 1][j];
if(j >= p[i]){
int t = dp[i][j - p[i]] + a[i];
if(!vis[i][j - p[i]]) t += b[i];
int t1 = dp[i - 1][j - p[i]] + a[i] + b[i];
if(t1 > t) t = t1;
if(t > dp[i][j]){
dp[i][j] = t;
vis[i][j] = 1;
}
}
}
}
printf("%d\n", dp
[m]);
}

int main(){
scanf("%d", &T);
while(T--){
scanf("%d%d", &m, &n);
for(int i = 1; i <= n; i ++) scanf("%d%d%d", p + i, a + i, b + i);
work();
}
return 0;
}


View Code
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: