0分求助

P1048 [NOIP2005 普及组] 采药

你这不是完全背包吗 这题是01背包
by slzx2021zjx @ 2023-08-13 07:09:59


```cpp #include<bits/stdc++.h> using namespace std; long long dp[10000][10000]; long long w[10000],v[10000]; long long m,t; int main() { scanf("%lld%lld",&m,&t); for(int i=1;i<=t;i++) { scanf("%lld%lld",&w[i],&v[i]); } for(int i=1;i<=t;i++) for(int j=m;j>=0;j--) { if(j>=w[i]) { dp[i][j]=max(dp[i-1][j-w[i]]+v[i],dp[i-1][j]); } else { dp[i][j]=dp[i-1][j]; } } printf("%lld",dp[t][m]); return 0; } ```
by jizhiyinnitaimei @ 2023-08-13 08:34:56


正解,~~非常简单~~ ```cpp #include <iostream> using namespace std; int a[10010],b[10010],f[10010]; int main() { int t,n; cin>>t>>n; for(int i=1; i<=n; i++) cin>>a[i]>>b[i]; for(int i=1; i<=n; i++) for(int j=t; j>=a[i]; j--) f[j]=max(f[j-a[i]]+b[i],f[j]); cout<<f[t]; } ```
by longzuchuzihang @ 2023-08-27 11:19:14


|