算法提高 金陵十三钗

原创 2017年03月22日 21:04:05

金陵十三钗
  本题难度:难
  本题占分比例:5%
问题描述
  在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔装打扮。但由于天生材质的原因,每个人和每个人之间的相似度是不同的。由于我们这是编程题,因此情况就变成了金陵n钗。给出n个女人和n个学生的相似度矩阵,求她们之间的匹配所能获得的最大相似度。
  所谓相似度矩阵是一个n*n的二维数组like[i][j]。其中i,j分别为女人的编号和学生的编号,皆从0到n-1编号。like[i][j]是一个0到100的整数值,表示第i个女人和第j个学生的相似度,值越大相似度越大,比如0表示完全不相似,100表示百分之百一样。每个女人都需要找一个自己代替的女学生。
  最终要使两边一一配对,形成一个匹配。请编程找到一种匹配方案,使各对女人和女学生之间的相似度之和最大。
输入格式
  第一行一个正整数n表示有n个秦淮河女人和n个女学生
  接下来n行给出相似度,每行n个0到100的整数,依次对应二维矩阵的n行n列。
输出格式
  仅一行,一个整数,表示可获得的最大相似度。
样例输入
4
97 91 68 14
8 33 27 92
36 32 98 53
73 7 17 82
样例输出
354
数据规模和约定
  对于70%的数据,n<=10
  对于100%的数据,n<=13
样例说明
  最大相似度为91+92+93+73=354
  


代码:

import java.util.Scanner;

/*
 * 8皇后的变种
 */
public class Main {
    static int N;
    static int[][] num;
    static int[] b;
    static int sum = 0;

    public static void dfs(int t){
        if ( t == N){
            int sum1 = 0;
            for ( int i = 0 ; i < N ; i++){
                sum1 += num[i][b[i]];
            }
            sum = Math.max(sum, sum1);
            return;
        }else{
            //第cur个人替代第i个人  
            for ( int i = 0 ; i < N ; i++){
                boolean flag = true;
                int j;
                for ( j = 0 ; j < t ; j++){
                    //第i个人已经被替代了
                    if( b[j] == i){
                        flag = false;
                        break;
                    }
                }
                if ( flag == true){
                    b[j] = i;
                    dfs(t+1);
                }
            }
        }
    }

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        N = in.nextInt();
        num = new int[N][N];
        b = new int[N];
        for ( int i = 0 ; i < N ; i++){
            for (int j = 0 ; j < N ; j++){
                num[i][j] = in.nextInt();
            }
        }
        dfs(0);
        System.out.println(sum);

        in.close();
    }

}
版权声明:本文为博主原创文章,未经博主允许不得转载。若需转载,请注明http://blog.csdn.net/qq_30091945 举报

相关文章推荐

算法提高 金陵十三钗

金陵十三钗   本题难度:难   本题占分比例:5% 问题描述   在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔...

蓝桥杯_算法提高_金陵十三钗(动态规划)

金陵十三钗   本题难度:难   本题占分比例:5% 问题描述   在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔...

我是如何成为一名python大咖的?

人生苦短,都说必须python,那么我分享下我是如何从小白成为Python资深开发者的吧。2014年我大学刚毕业..

蓝桥杯算法提高 -- 金陵十三钗

思路 :  这道题最基本的做法就是DFS直接暴力破解, 这样的复杂度毫无疑问的O( n! ), 是不能完全AC的. 那么, 看到这道题问的是最优解, 那么想必跟动态规划能扯上关系了, 但是咋一看, ...

蓝桥杯_算法提高_金陵十三钗(简单枚举)

金陵十三钗   本题难度:难   本题占分比例:5% 问题描述   在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔...

《十三钗》冲金未果

美国当地时间1月18日,奥斯卡最佳外语片提名九强大名单出炉,从63部来自全球各个国家和地区的新片大名单中,提取了9部候选影片参加角逐,第二轮评选将产生5项提名。代表中国内地出战的张艺谋作品《金陵十三钗...

《红楼梦》之金陵十二钗vs韩国明星

林黛玉-孙艺珍 因父母先后去世,外祖母怜其孤独,接来荣国府抚养。虽然她是寄人篱下的孤儿,但她生性孤傲,天真率直,和宝玉同为封建的叛逆者,从不劝宝玉走封建的仕宦道路。她蔑视功名权贵,当贾宝玉把北静王所赠...

金陵四十八景

老的金陵四十八景1)石城霁雪——清凉山石头城上的雪景; 2)钟阜晴云——紫金山上的云景; 3)鹭洲二水——江东门外白鹭村一带的古白鹭洲,李白诗“二水中分白鹭洲”; 4)凤凰三山——城西南露岗凤凰...

错排问题--十二金钗

#每日一面BAT#第6题:金钗赛诗 每日一面BAT 赛诗会后,十二金钗待奔前程。 分别宴上,12人各写了一首诗放入宝囊。 大家随机取一个,若取到自己的诗,则再取一个并放回自己的诗。...

算法提高 金属采集

问题描述 人类在火星上发现了一种新的金属!这些金属分布在一些奇怪的地方,不妨叫它节点好了。一些节点之间有道路相连,所有的节点和道路形成了一棵树。一共有 n 个节点,这些节点被编号为 1~n 。人类将...

金陵十三衩中想到的国民党德式师

作为欧洲陆军强国的德国,历来就是一些在军事上相对比较落后国家的学习效仿对象,如日本明治维新时所建立的陆军几乎就是照搬普鲁士陆军全套军事思想,建设制度和制式操典.而中国很早就开始学习德国军事,清朝后期所...
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)