0分求助

P1048 [NOIP2005 普及组] 采药

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


|