算法提高 金陵十三钗

原创 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

相关文章推荐

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

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

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

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

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

算法提高 金陵十三钗   时间限制:1.0s   内存限制:256.0MB        金陵十三钗   本题难度:难   本题占分比例:5% 问题描述   ...

嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )

发现放到Blog之后排版全乱套了。。 已经把PDF上传到资源页了 http://download.csdn.net/detail/lyy289065406/8934637...

Java高并发秒杀API之业务分析与DAO层

目录(?)[+] 课程介绍 高并发和秒杀都是当今的热门词汇,如何使用Java框架实现高并发秒杀API是该系列课程要研究的内容。秒杀系列课程分为四门,本门课程是第一门,主要对...

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

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

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

作为欧洲陆军强国的德国,历来就是一些在军事上相对比较落后国家的学习效仿对象,如日本明治维新时所建立的陆军几乎就是照搬普鲁士陆军全套军事思想,建设制度和制式操典.而中国很早就开始学习德国军事,清朝后期所...

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

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

【H.264/AVC视频编解码技术详解】十三、熵编码算法(3):CAVLC原理

《H.264/AVC视频编解码技术详解》视频教程已经在“CSDN学院”上线,视频中详述了H.264的背景、标准协议和实现,并通过一个实战工程的形式对H.264的标准进行解析和实现,欢迎观看!“纸上得来...

C#数据结构和算法学习系列十三----链表

链表是被称为节点的类对象的群集。每一个节点通过一个引用链接到列表内的后继节点上。节点包括存储数据的字段和节点引用的字段。到另外一个节点的引用被称为是链接。数组和链表之间的一个主要区别就是数组内的元素是...
  • nlx0201
  • nlx0201
  • 2011年09月21日 12:09
  • 929
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:算法提高 金陵十三钗
举报原因:
原因补充:

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