求助
查看原帖
求助
964822
protractor半圆仪楼主2023/8/22 22:06

代码

#include<iostream>
#include<vector>
#include<cstring>
#include<algorithm>
using namespace std;
int vis[25];
int l[25];
int v[25][25];
int ans;
int n;
int st[25],t;
void dfs(int d,int s)
{
    ans=max(ans,s);
	vis[d]=1;
    for(int i=1;i<=n;i++)
    {
    	if(vis[i]||(!v[i][d])) continue;
		vis[i]=1;
	    dfs(i,s+l[i]);
    }
    vis[d]=0;
}
int b=0;
void dfs2(int d,int s)
{
    if(b) return;
    st[++t]=d;
    if(s==ans) 
    {
        for(int i=1;i<=n;i++) cout<<st[i]<<' ';
        b=1;
        return;
    }
	vis[d]=1;
    for(int i=1;i<=n;i++)
    {
    	if(vis[i]||(!v[i][d])) continue;
		vis[i]=1;
	    dfs2(i,s+l[i]);
    }
    vis[d]=0;
    t--;
}
int main()
{
    cin>>n;
    for(int i=1;i<=n;i++) cin>>l[i];
    for(int i=1;i<n;i++)
    {
        for(int j=i+1;j<=n;j++) 
        {
            cin>>v[i][j];
            v[j][i]=v[i][j];
        }
    }
    for(int i=1;i<=n;i++)
    {
        dfs(i,l[i]);
    }
    for(int i=1;i<=n;i++)
    {
        dfs2(i,l[i]);
    }
    cout<<'\n'<<ans;
    return 0;
}

输入

5
10 8 4 7 6
1 1 1 0
0 0 0
1 1
1

输出

2 1 3 4 5 
35

正确输出

1 3 4 5
27

求调

2023/8/22 22:06
加载中...