挺好懂的, 因为有主件附件, 就把附件的加到主建就行了, 看作是一个。然后用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语言程序设计教程(第三版)课后习题8.5 (C语言代码)浏览:534 |
WU-复数求和 (C++代码)浏览:1995 |
C语言程序设计教程(第三版)课后习题8.4 (C语言代码)浏览:619 |
WU-拆分位数 (C++代码)浏览:775 |
简单的a+b (C语言代码)浏览:523 |
C语言程序设计教程(第三版)课后习题10.3 (C语言代码)浏览:526 |
【蟠桃记】 (C语言代码)浏览:1021 |
Hello, world! (C语言代码)浏览:714 |
有关字符,字符串的输入输出函数说明浏览:477 |
C二级辅导-同因查找 (C语言代码)浏览:563 |