已退役


私信TA

用户名:15893197790

访问量:13447

签 名:

努力学习,积极生活。

等  级
排  名 383
经  验 4980
参赛次数 0
文章发表 43
年  龄 0
在职情况 学生
学  校 南京大学
专  业 计算机科学与技术

  自我简介:

已退役。研究生方向为AI+软件工程,欢迎学术交流!

解题思路:

注意事项:

参考代码:

#include<bits/stdc++.h>

using namespace std;

#define maxn 15//对于100%的数据,n<=13

int n,similar[maxn][maxn];

int dp[maxn][1<<13];

bool legal(int i,int k){//前i个人是否能形成k这种情形,也就是k中的1的个数是否=i

    int numof1=0;

    while(k){

        if(k&1){

            numof1++;

        }

        k>>=1;

    }

    if(i==numof1)return 1;

    return 0;

}

int main(){

    scanf("%d",&n);

    for(int i=1;i<=n;i++){

        for(int j=1;j<=n;j++){

            scanf("%d",&similar[i][j]);

        }

    }

    dp[0][0]=0;

    for(int i=1;i<=n;i++){

        for(int j=1;j<=n;j++){

            for(int k=1;k<(1<<n);k++){

                if((k>>(j-1))&1&&legal(i,k)){//k对应的情况选了第j个人

                    dp[i][k]=max(dp[i][k],dp[i-1][k-(1<<(j-1))]+similar[i][j]);

                }

            }

        }

    }

    printf("%d",dp[n][(1<<n)-1]);

    //system("pause");

    return 0;

}


 

0.0分

1 人评分

看不懂代码?想转换其他语言的代码? 或者想问其他问题? 试试问问AI编程助手,随时响应你的问题:

编程语言转换万能编程问答  

代码解释器

代码纠错

SQL生成与解释

  评论区