@[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