0分求助!
查看原帖
0分求助!
754502
_AyachiNene楼主2022/10/21 23:04
#include<bits/stdc++.h>
using namespace std;
int a[25],n,ma[25][25],ans[114],sum=0,cnt1=0,ans1,p[25];
bool vis[25];
void dfs(int i,int sum1,int cnt)
{
	bool b=1;
	p[cnt++]=i;
	for(int j=1;j<=n;j++)
	{
		if(ma[i][j]==1&&vis[j]==0)
		{
			b=0;
			vis[j]=1;
			dfs(j,sum1+a[j],cnt+1);
			vis[j]=1;
		}
	}
	if(b)
	{
		sum=max(sum,sum1);
		if(cnt>cnt1&&sum<sum1)
			cnt1=cnt;
		if(sum<sum1)
			for(int i=1;i<=cnt;i++)
				ans[i]=p[i];
		return;
	}
}
int main()
{
	cin>>n;
	for(int i=1;i<=n;i++)
	 	cin>>a[i];
	for(int i=1;i<=n-1;i++)
		for(int j=1;j<=n-i;j++)
		{
			int x;
			cin>>x;
			if(x==1)
				ma[i][j]=1;
		}
	for(int i=1;i<=n;i++)
	{
		sum=0;
		dfs(i,a[i],1);
		if(sum>ans1)
			ans1=sum;
	}
	for(int i=1;i<=cnt1;i++)
		cout<<ans[i]<<" ";
	cout<<endl<<ans1;
}
2022/10/21 23:04
加载中...