听取WA声一片
查看原帖
听取WA声一片
1221613
wangzc2012楼主2024/5/12 22:27
#include<bits/stdc++.h>
using namespace std;
int n;
int lt[25];  //地雷数量
bool ls[20][20];  //是否连通,1为联通
bool z[25]; //是否走过,1为走过
int b[9999];  //走过的点
int bi=0;
int bz[9999];  //走过的点
int l;
int ans=0;
int maxans=-1;
int step=0;
int hstep=0;

bool thck(int l){
    for (int i=0;i<n;i++){
        if (ls[l][i] and !z[i]) return false;
    }
    return true;
}

void dfs(int l,int step,int ans){
    if (thck(l)){
        if (ans>maxans) {
            maxans=ans;
            hstep=step;
            for (int i=0;i<step;i++) bz[i]=b[i];
            ans=0;
            step=0;
            bi=0;
        }
    }
    for (int i=0;i<n;i++){
        if (ls[l][i] and !z[i]){
            z[i]=1;
            b[bi]=i;
            bi++;
            ans+=lt[i];
            step++;
            dfs(i,step,ans);
            z[i]=0;
        }
    }
}

int main(){
    cin>>n;
    for (int i=0;i<n;i++) cin>>lt[i];
    for (int i=0;i<n-1;i++){
        for (int j=0;j<n-i-2;j++){
            cin>>ls[i][j];
        }
    }
    for (int i=0;i<n;i++){
        dfs(0,0,lt[i]);
    }
    for (int i=0;i<hstep;i++) cout<<bz[i]+1<<' ';
    cout<<'\n';
    cout<<maxans;
    return 0;
}
2024/5/12 22:27
加载中...