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