求助啊,代码跟题解的一个大佬的基本没区别没过
#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;
}
求找茬