90分求助,大佬(没用并查集)
  • 板块P1455 搭配购买
  • 楼主Yannik
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/7/18 14:43
  • 上次更新2023/11/3 09:07:55
查看原帖
90分求助,大佬(没用并查集)
655195
Yannik楼主2023/7/18 14:43
#include<bits/stdc++.h>
#define N 10100
using namespace std;
int n,m,W;
int c[N],d[N];
int cnt=0,num[10100][10100];
int dp[N],ans;
int vv[N],ww[N];
int main(){
	cin>>n>>m>>W;
	for(int i=1;i<=n;i++){
		cin>>c[i]>>d[i];
		num[i][1]=i;
	}
	for(int i=1;i<=m;i++){
		int u,v;
		cin>>u>>v;
		for(int j=1;j<=n;j++){
			for(int k=1;k<=100;k++){
				if(num[j][k]==0){
					break;
				} else if(num[j][k]==u){
					num[j][k+1]=v;
					num[v][1]=0;
					break;
				} else if(num[j][k]==v){
					num[j][k+1]=u;
					num[u][1]=0;
					break;
				}
			}
		}
	}
	for(int i=1;i<=n;i++){
		if(num[i][1]>0) cnt++;
		for(int j=1;j<=n;j++){
			if(num[i][j]==0){
				break;
			} else {
				vv[cnt]+=c[num[i][j]];
				ww[cnt]+=d[num[i][j]];
			}
		}
		
	}
	for(int i=1;i<=cnt;i++){
		for(int j=W;j>=vv[i];j--){
			if(dp[j-vv[i]]+ww[i]>=dp[j]){
				dp[j]=dp[j-vv[i]]+ww[i];
			}
		}
	}
	for(int i=1;i<=W;i++){
		ans=max(dp[i],ans);
	}
	cout<<ans;
	return 0;
}
2023/7/18 14:43
加载中...