11 条题解

  • 0
    @ 2025-3-30 14:49:58
    #include <bits/stdc++.h>
    using namespace std;
    const int N=20;
    int n,ans=1e9;
    int g[N][N];
    int st[N],a[N];  //a[]表示当前第n个到达的岛屿的编号
    //当前按顺序到达了第x个岛屿,累计的时间
    void dfs(int x,int sum){
        if(sum>ans) return;
        if(x==n-1){
            ans=min(ans,sum+g[a[x]][n]);
            //cout<<ans<<endl;
            return;
        }
        for(int i=1;i<n;i++){
            if(!st[i]){
                st[i]=1;
                a[x+1]=i;
                dfs(x+1,sum+g[a[x]][i]);
                st[i]=0;
                a[x+1]=0;
            }
        }
    }
    
    int main(){
        cin>>n;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                cin>>g[i][j];
            }
        }
        st[1]=1;
        a[1]=1;
        dfs(1,0);
        cout<<ans<<endl;
        return 0;
    }
    

    信息

    ID
    80
    时间
    1000ms
    内存
    256MiB
    难度
    7
    标签
    递交数
    368
    已通过
    88
    上传者