90pts 求助悬赏一关注

P1060 [NOIP2006 普及组] 开心的金明

```cpp for(int j=0; j <= n;j++) ``` 这一行改成这个,因为你用的是朴素版本的01背包,,不用担心状态覆盖,所以应该正着循环。
by Brilliant11001 @ 2023-07-19 15:39:48


@[lwliu](/user/875566)
by Brilliant11001 @ 2023-07-19 15:40:05


``` #include <bits/stdc++.h> using namespace std ; int w[30], v[30], dp[30005]; int main() { int m, n; cin >> n >> m; for(int i = 1; i <= m; i++) cin >> w[i] >> v[i]; for(int i = 1; i <= m; i++) for(int j = n; j >= w[i]; j--) dp[j] = max(dp[j], dp[j - w[i]] + w[i] * v[i]); printf("%d", dp[n]); return 0 ; } ``` 这类似01背包模板啊,对着我的AC程序可以看一下
by ccg12345 @ 2023-07-19 15:42:03


@[lwliu](/user/875566) 哦,如果你用朴素版的话还要再if后加 ```cpp else dp[i][j] = d[i - 1][j]; ```
by Brilliant11001 @ 2023-07-19 15:47:42


@[Brilliant11001](/user/602372) 感谢给你关注
by xixiangrui @ 2023-07-19 15:55:31


@[ccg12345](/user/793150) 谢谢给关注
by xixiangrui @ 2023-07-19 15:56:01


```cpp #include <bits/stdc++.h> using namespace std; int w[31],c[31],f[50001]; int main(){ int m,n; cin >> m >> n; for(int i = 1;i <= n;i++){ cin >> w[i] >> c[i]; c[i] *= w[i]; } for(int i = 1;i <= n;i++){ for(int j = m;j >= w[i];j--){ f[j] = max(f[j],f[j-w[i]] + c[i]); } } cout << f[m]; return 0; } ```
by lucas_777 @ 2023-07-30 18:34:56


|