首页 > 代码库 > HDU 2159 FATE【二维多重背包】
HDU 2159 FATE【二维多重背包】
大意:二维多重背包
分析:二维多重背包
代码:
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <vector> 5 using namespace std; 6 7 const int maxn = 105; 8 int dp[maxn][maxn]; 9 int a[maxn], b[maxn];10 11 int main() {12 int n, m, s, k;13 while(EOF != scanf("%d %d %d %d",&n, &m, &k, &s) ) {14 for(int i = 1; i <= k; i++) {15 scanf("%d %d",&a[i], &b[i]);16 }17 memset(dp, 0, sizeof(dp));18 for(int i = 1; i <= k; i++) {19 for(int j = b[i]; j <= m; j++) {20 for(int l = 1; l <= s; l++) {21 dp[j][l] = max(dp[j][l], dp[j - b[i]][l - 1] + a[i]);22 }23 }24 }25 int ans = -1;26 for(int j = 0; j <= m; j++) {27 for(int l = 0; l <= s; l++) {28 if(dp[j][l] >= n) {29 ans = max(ans, m - j);30 }31 }32 }33 printf("%d\n", ans);34 }35 return 0;36 }
HDU 2159 FATE【二维多重背包】
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。