代码
#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
求调