1 条题解

  • 0
    @ 2021-12-25 02:28:50

    #include <iostream>
    using namespace std;
    bool a[210][210];//a[i][j]表示第i个地窖和第j个地窖是否是通路
    int w[210],n,f[210],surf[210];//f[i]表示从第i个地窖开始挖的最多地雷数,surf用来存顺序
    int main()
    {
    cin>>n;
    for(int i=1;i<=n;i++){
    cin>>w[i];
    }
    int x,y;
    while(cin>>x>>y){
    if(x==0&&y==0){
    break;
    }
    a[x][y]=1;
    }
    f[n]=w[n];
    for(int i=n-1;i>=1;i--){
    int k=0,l=0;
    for(int j=i+1;j<=n;j++){
    if(a[i][j]==1&&f[j]>l){
    l=f[j];
    k=j;
    }
    f[i]=l+w[i];
    surf[i]=k;
    }
    }
    int k=1;
    for(int i=1;i<=n;i++){
    if(f[k]<f[i]){
    k=i;
    }
    }
    int maxn=f[k];
    cout<<k;//先输出起始点
    k=surf[k];
    while(k!=0){//向后的链表
    cout<<"-"<<k;
    k=surf[k];
    }
    cout<<endl;
    cout<<maxn<<endl;
    return 0;
    }

  • 1

信息

难度
9
分类
(无)
标签
递交数
41
已通过
2
通过率
5%
上传者