80pts求助#5#6WA

P1064 [NOIP2006 提高组] 金明的预算方案

@FYCCCTA
by Norsuman371 @ 2024-01-17 21:26:58


@[2011FYCCCTA](/user/923403)
by Norsuman371 @ 2024-01-17 21:27:25


@[Norsuman371](/user/929896) 冒昧吱一声:“啊?”
by Eric_Shi @ 2024-01-17 21:31:21


```cpp #include <iostream> using namespace std; #define MAXN 32001 int n, m, v, p, q; int mw[MAXN], mv[MAXN]; //主件重量,价值 int fw[MAXN][3], fv[MAXN][3]; //主件对应的附件(最多2个)的重量,价值 int cnt[MAXN]; //每个主件的附件数量 int f[MAXN]; int main() { cin >> n >> m; for (int i = 1; i <= m; i++) { cin >> v >> p >> q; if (q == 0) { //主件 mw[i] = v; mv[i] = v*p; } else { //附件 cnt[q]++; fw[q][cnt[q]] = v; fv[q][cnt[q]] = v*p; } } for (int i = 1; i <= m; i++) { for (int j = n; j >= mw[i]; j--) { f[i] = max(f[i], f[j-mw[i]]+mv[i]); //主件 if (j >= mw[i] + fw[i][1]) f[j] = max(f[j], f[j-mw[i]-fw[i][1]]+mv[i]+fv[i][1]); //主件+附件1 if (j >= mw[i] + fw[i][2]) f[j] = max(f[j], f[j-mw[i]-fw[i][2]]+mv[i]+fv[i][2]); //主件+附件2 if (j >= mw[i] + fw[i][1] + fw[i][2]) f[j] = max(f[j], f[j-mw[i]-fw[i][1]-fw[i][2]]+mv[i]+fv[i][1]+fv[i][2]); //主件+附件1+附件2 } } cout << f[n]; return 0; } ```
by Eric_Shi @ 2024-01-17 21:38:48


@[EricTedd](/user/813709) 不会呀,请神犇朋友解答(~~简洁表示:我太菜了)~~
by Norsuman371 @ 2024-01-17 21:40:54


@[EricTedd](/user/813709) 其中一个错误: `f[i] = max(f[i], f[j-mw[i]]+mv[i]);` 改为 `f[i] = max(f[j], f[j-mw[i]]+mv[i]);`
by 2011FYCCCTA @ 2024-01-17 21:49:34


emm我犯傻了,前面的`f[i]`也要改
by 2011FYCCCTA @ 2024-01-17 21:50:47


AC了
by 2011FYCCCTA @ 2024-01-17 21:51:15


@[2011FYCCCTA](/user/923403) 哦哦谢谢,~~我手残眼瞎脑子短路~~
by Eric_Shi @ 2024-01-17 21:57:42


|