求助分组背包
  • 板块题目总版
  • 楼主caramel_qwq
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/1/8 15:57
  • 上次更新2023/10/24 05:09:43
查看原帖
求助分组背包
444195
caramel_qwq楼主2023/1/8 15:57

w是重量,v是价值,每组选且只选一个,可以不选。

我这个代码是每组都选的情况, 目前主要的问题是某一组如果不选怎么改?

#include<bits/stdc++.h>
using namespace std;
int n,V,s[108],ans;
struct node{
	vector<int> w,v;
}a[108];
int dp[1008];
int main(){
	scanf("%d%d",&n,&V);
	for(int i=1;i<=n;i++){
		scanf("%d",&s[i]);
		for(int j=1;j<=s[i];j++){
			int w1,v1;
			scanf("%d%d",&w1,&v1);
			a[i].w.push_back(w1);
			a[i].v.push_back(v1);
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=0;j<s[i];j++){
			for(int k=V;k>=a[i].w[j];k--){
				dp[k]=max(dp[k],dp[k-a[i].w[j]]+a[i].v[j]);
			}
		}
	}
	printf("%d\n",dp[V]);
	return 0;
}
2023/1/8 15:57
加载中...