@[leosana](/user/722834) 在吗?
by 15167987933yy @ 2023-08-02 14:15:55
for(int j=t;j>0;j--)要改为for(int j=t;j>=0;j--)
if(time[i]<=t)要改为if(time[i]<=j)
printf("%d",f[t][m])要改为printf("%d",f[m][t])
by luogu10086 @ 2023-08-02 14:16:18
修改后的代码为:
```cpp
#include<iostream>
#include<cstdio>
#include<iomanip>
using namespace std;
const int maxn=1005;
const int maxnx=105;
int max(int x,int y){
if(x>y){
return x;
}else{return y;
}
}
int main(){
int t,m;
cin>>t>>m;
int f[maxnx][maxn];
int time[maxnx];
int worth[maxnx];
for(int i=1;i<=m;i++){
scanf("%d%d",&time[i],&worth[i]);
}
for(int i=1;i<=m;i++){
for(int j=t;j>=0;j--){
if(time[i]<=j){
f[i][j]=max(f[i-1][j],f[i-1][j-time[i]]+worth[i]);
}else
f[i][j]=f[i-1][j]; }
}
printf("%d",f[m][t]);
return 0;
}
```
by luogu10086 @ 2023-08-02 14:17:30
我是这样做的
```c
#include<iostream>
#include<stdio.h>
using namespace std;
int w[105],val[105];
int dp[105][1005];
int main()
{
int t,m,res=-1;
scanf("%d%d",&t,&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d",&w[i],&val[i]);
}
for(int i=1;i<=m;i++)
for(int j=t;j>=0;j--)
{
if(j>=w[i])
{
dp[i][j]=max(dp[i-1][j-w[i]]+val[i],dp[i-1][j]);
}
else
{
dp[i][j]=dp[i-1][j];
}
}
printf("%d",dp[m][t]);
return 0;
}
```
希望对你有帮助
by 15167987933yy @ 2023-08-02 14:19:24
我也来发表一下吧<鄙人是个蒟蒻>:
```c
#include<bits/stdc++.h>
using namespace std;
int n,m,i,j,w[102],v[102],f[100002];
int main(){
cin>>m>>n;
for(i=1;i<=n;i++){
cin>>w[i];
cin>>v[i];
}
for(i=1;i<=n;i++){
for(j=m;j>=0;j--){
if(j>=w[i]){
f[j]=max(f[j],f[j-w[i]]+v[i]);
}
}
}
cout<<f[m];
return 0;
}
```
我也一样,希望对你有帮助
by shenyeting @ 2023-08-10 16:48:42