dp萌新求助写了个二维的,不知道是方程错了还是哪里求调

P2430 严酷的训练

@[shoot_down](/user/616964) 你要不省略第一维就得把 $j<t[p[i]]$ 的状态转移全 或者也可以省略第一维
by _maojun__ @ 2022-12-27 21:37:36


```cpp for(int i=1;i<=n;i++) { cin>>w2; t[i]=w/wk*w2; } ``` 这段的话是老王的时间,你这么算没有道理 给代码: ```cpp #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> using namespace std; int w[5010],v[5010],a[5010]; int f[5010]; int main() { int l1,l2,n,m,nn; cin >> l1 >> l2 >> n >> nn; for (int i = 1;i <= nn;i++) cin >> a[i]; for (int i = 1;i <= n;i++) { int x; cin >> x >> v[i]; w[i] = a[x] * l2 / l1; } cin >> m; memset(f,0,sizeof(f)); for (int i = 1;i <= n;i++) for (int j = m;j >= w[i];j--) f[j] = max(f[j],f[j - w[i]] + v[i]); cout << f[m] << endl; return 0; } ```
by codejiahui @ 2022-12-27 21:40:09


@[codejiahui](/user/512407) 错误的 >老王的水平值是 WKY 的水平值的整数倍。 请仔细审题,这不是问题所在
by _maojun__ @ 2022-12-27 21:43:22


sorry 请只看代码吧
by codejiahui @ 2022-12-27 21:58:29


```#include <iostream> #include <algorithm> using namespace std; int num[5005],v[5005],w[5005],dp[5005][5005]; int main() { int wky,wang,m,n,time; cin>>wky>>wang>>m>>n; for(int i=1;i<=n;i++) { cin>>num[i]; num[i]=num[i]*wang/wky; } for(int i=1;i<=m;i++) { cin>>v[i]>>w[i]; v[i]=num[v[i]]; } cin>>time; for(int i=1;i<=m;i++) for(int j=0;j<=time;j++) { if(j>=v[i]) dp[i][j]=max(dp[i-1][j],dp[i-1][j-v[i]]+w[i]); else dp[i][j]=dp[i-1][j]; } cout<<dp[m][time]<<endl; return 0; } ```
by ZL2021 @ 2023-04-15 23:21:54


|