把if和else去掉,你都写了max了还写if else就没啥意义了
by Rain_sun @ 2023-07-22 09:22:08
@[baiyang_233](/user/750476)
by Rain_sun @ 2023-07-22 09:22:16
```
for(int j=1;j<=ti;j++){
f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+v[i]);
}
by Rain_sun @ 2023-07-22 09:22:40
@[Rain_sun](/user/1018563) 谢佬
[但还是wa(摊)](https://www.luogu.com.cn/record/116854574)
by Baiyang_2333 @ 2023-07-22 09:25:23
@[baiyang_233](/user/750476) j应该从t[i]开始循环吧
by Asimplename @ 2023-07-22 09:26:51
```cpp
#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
ull w[1001],v[1001],f[1001][1001];
int main() {
ull c,n;
cin>>c>>n;
for(int i=1; i<=n; i++)
cin>>w[i]>>v[i];
for(int i=1; i<=n; i++)
for(int j=1; j<=c; j++) {
if(j<w[i])
f[i][j]=f[i-1][j];
else
f[i][j]=max(f[i-1][j],f[i-1][j-w[i]]+v[i]);
}
cout<<f[n][c]<<endl;
return 0;
}```
by hjqhs @ 2023-07-22 09:27:15
@[Asimplename](/user/422647) ......?
甚么
by Baiyang_2333 @ 2023-07-22 09:28:38
@[baiyang_233](/user/750476) 我说你按照[这个代码](https://www.luogu.com.cn/record/116854574)应该把j改为从t[i]开始循环
by Asimplename @ 2023-07-22 09:30:39
@[baiyang_233](/user/750476)
```cpp
#include<bits/stdc++.h>
using namespace std;
int w[10001],c[10001],f[10001];
int main()
{
int t,m,i,j;
cin>>t>>m;
for(i=1;i<=m;i++)
{
cin>>w[i]>>c[i];
}
for(i=1;i<=m;i++)
{
for(j=t;j>=w[i];j--)
{
f[j]=max(f[j],f[j-w[i]]+c[i]);
}
}
cout<<f[t]<<endl;
return 0;
}
by hzoi_Shadow @ 2023-07-22 09:32:34
帖结
应该把状态转移方程改成
```cpp
f[i][j]=max(f[i-1][j],f[i-1][j-t[i]]+v[i]);
```
而不是原代码的
```cpp
f[i][j]=max(f[i-1][j],f[i-1][ti-t[i]]+v[i]);
```
所有回复的大佬皆关
by Baiyang_2333 @ 2023-07-22 09:34:54