求助啊,代码跟题解的一个大佬的基本没区别没过

#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;
}

求找茬

全部评论

相关推荐

评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务