2019-03-17

#include<iostream>
#include<algorithm>
using namespace std;
const int maxn=21;
int yes[maxn][maxn],A[maxn],d[maxn],next[maxn];
int main(void)
{
    int n;
    cin>>n;
    for(int i=1;i<=n;i++) cin>>A[i];
    for(int i=1;i<=n-1;i++)
    {
        for(int j=i+1;j<=n;j++)
        {
            cin>>yes[i][j];
        }
    }
    for(int i=n;i>=1;i--)
    {
        d[i]=A[i];
        int Max=0,index=0;
        for(int j=i+1;j<=n;j--)
        {
            if(yes[i][j] && d[j]>Max)
            {
                Max=d[j];
                index=j;
            }
        }
        if(index!=0)
        {
            d[i]+=Max;
            next[i]=index;
        }
    }
    int index=1,Max=0;
    for(int i=2;i<=n;i++) if(d[i]>d[index]) index=i;
    Max=d[index];
    while(index!=0)
    {
        cout<<index;
        index=next[index];
        if(index!=0) cout<<" "; 
    }
    cout<<endl;
    cout<<Max;
    return 0;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容