您的位置:首页 > 其它

HDU 2159 FATE【二维多重背包】

2014-08-29 22:34 309 查看
大意:二维多重背包

分析:二维多重背包

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;

const int maxn = 105;
int dp[maxn][maxn];
int a[maxn], b[maxn];

int main() {
int n, m, s, k;
while(EOF != scanf("%d %d %d %d",&n, &m, &k, &s) ) {
for(int i = 1; i <= k; i++) {
scanf("%d %d",&a[i], &b[i]);
}
memset(dp, 0, sizeof(dp));
for(int i = 1; i <= k; i++) {
for(int j = b[i]; j <= m; j++) {
for(int l = 1; l <= s; l++) {
dp[j][l] = max(dp[j][l], dp[j - b[i]][l - 1] + a[i]);
}
}
}
int ans = -1;
for(int j = 0; j <= m; j++) {
for(int l = 0; l <= s; l++) {
if(dp[j][l] >= n) {
ans = max(ans, m - j);
}
}
}
printf("%d\n", ans);
}
return 0;
}


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