求助啊,代码跟题解的一个大佬的基本没区别没过
#include<bits/stdc++.h> using namespace std; int main(){ int N,V;//物品个数,背包容量 cin>>N>>V; vector<int>w(N+1),v(N+1); for(int i=1;i<=N;i++){ cin>>v[i]>>w[i];//体积、价值 } vector<int>dp1(V+1,0),dp2(V+1,-0x3f); dp2[0]=0; for(int i=1;i<=N;i++){ for(int j=v[i];j<=V;j++){ dp1[j]=max(dp1[j],dp1[j-v[i]]+w[i]); dp2[j]=max(dp2[j],dp2[j-v[i]]+w[i]); } } cout<<dp1[V]<<endl; if(dp2[V]<=0)cout<<0<<endl; else cout<<dp2[V]<<endl; }
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1010; const int INF = 0x3f3f3f3f; int n, V, v[N], w[N], dp[N]; int main() { #ifdef LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); #endif ios::sync_with_stdio(false), cin.tie(0); cin >> n >> V; for (int i = 1; i <= n; i++) { cin >> v[i] >> w[i]; } memset(dp, 0, sizeof(dp)); for (int i = 1; i <= n; i++) for (int j = v[i]; j <= V; j++) dp[j] = max(dp[j], dp[j - v[i]] + w[i]); cout << dp[V] << endl; memset(dp, -0x3f, sizeof(dp)); dp[0] = 0; for (int i = 1; i <= n; i++) for (int j = v[i]; j <= V; j++) dp[j] = max(dp[j], dp[j - v[i]] + w[i]); if (dp[V] < 0) dp[V] = 0; cout << dp[V] << endl; return 0; }
求找茬