RT,DP做的
//By: Luogu@wangdemao(308854)
#include <iostream>
#include <cstring>
using std::cin;
using std::cout;
using std::cerr;
using std::min;
using std::max;
int g[1000][1000],f[298222],geshu[321098],c[19041];
int main()
{
int n;
cin>>n;
for(int i=1;i<=n;i++)
cin>>geshu[i];
for(int i=1;i<=n;i++)
{
for(int j=i+1;j<=n;j++)
{
cin>>g[i][j];
g[j][i]=g[i][j];
}
}
f[n]=geshu[n];
//memset(f,-1,sizeof(f));
for(int i=n-1;i>=1;i--)
{
for(int j=i-1;j<=n;j++)
{
if(g[i][j])
if(f[i]<f[j]+geshu[i])
f[i]=f[j]+geshu[i],c[i]=j;
}
}
int qidian=1,i;
for(int i=1;i<=n;i++)
{
if(f[i]>f[qidian])
qidian=i;
}
//cout<<qidian;
/*
3
10 20 5
0 1
0
*/
i=qidian;
while(i!=0)
{
cout<<i<<" ";
i=c[i];
}
cout<<std::endl;
cout<<f[qidian]<<std::endl;
return 0;
}