为啥这样不对啊
查看原帖
为啥这样不对啊
1389641
_Kenba_楼主2025/1/3 19:22
#include<bits/stdc++.h>
using namespace std;
int n,v;
vector<int> vm[55];
vector<int> price[55];
int num,zhu[55],cnt;
vector<int> v1;
vector<int> p1;
int f[100010];
void dfs(int x,int y,int h,int u){
	if(x==vm[y].size()){
		++cnt;
		v1.push_back(h);
		p1.push_back(u+zhu[y]);
		return;
	}
	dfs(x+1,y,h,u);
	dfs(x+1,y,h+vm[y][x],u+price[y][x]);
}
int main(){
	ios::sync_with_stdio(0);
	cout.tie(0);
	cin.tie(0);
	cin>>n>>v;
	for(int i=1;i<=n;i++){
		int t;
		cin>>zhu[++num]>>t;
		for(int j=1;j<=t;j++){
			int vv,pp;
			cin>>pp>>vv;
			price[num].push_back(pp);
			vm[num].push_back(vv);
		}
	}
	for(int i=1;i<=num;i++){
		dfs(0,i,0,0);
	}
//	for(int i=0;i<cnt;i++){
//		cout<<p1[i]<<" "<<v1[i]<<endl;
//	}
	for(int i=0;i<cnt;i++){
		for(int j=v;j>=p1[i];j--){
			f[j]=max(f[j],f[j-p1[i]]+v1[i]);
		}
	}
	int ans=0;
	for(int i=0;i<=v;i++){
		ans=max(ans,f[i]);
	}
	cout<<ans;
	return 0;
}
2025/1/3 19:22
加载中...