挺好懂的, 因为有主件附件, 就把附件的加到主建就行了, 看作是一个。然后用01背包问题解法。 #include <bits/stdc++.h> using namespace std; const int N = 101010; int n, m, sum = 1, sum2 = 1; int a[N], a1[N]; int w, v, f[N], p; int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> w >> v >> p; int qq = 0; qq = w * v;//乘上价值 if (!p) { a1[sum2++] = w; a[sum++] = qq; } else{ a[p] += qq; a1[p] += w; } } sum -= 1; for (int i = 1; i <= sum; i++){ for (int j = n; j >= a1[i]; j--){ f[j] = max(f[j], f[j - a1[i]] + a[i]) ; } } cout << f[n] <<endl; return 0; }
0.0分
1 人评分
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:676 |
WU-链表数据求和操作 (C++代码)浏览:1312 |
用筛法求之N内的素数。 (C语言代码)浏览:802 |
【蟠桃记】 (C语言代码)浏览:1021 |
用筛法求之N内的素数。 (C++代码)浏览:692 |
sizeof的大作用 (C语言代码)浏览:1447 |
C语言程序设计教程(第三版)课后习题5.8 (C语言代码)浏览:1140 |
循环入门练习6 (C语言代码)浏览:952 |
C二级辅导-统计字符 (C语言代码)浏览:476 |
字符逆序 (C语言代码)浏览:612 |