蓝桥 金陵十三钗 (状压+记忆化搜索)

简介: 蓝桥 金陵十三钗 (状压+记忆化搜索)

题目描述
在电影《金陵十三钗》中有十二个秦淮河的女人要自我牺牲代替十二个女学生去赴日本人的死亡宴会。为了不让日本人发现,自然需要一番乔装打扮。但由于天生材质的原因,每个人和每个人之间的相似度是不同的。由于我们这是编程题,因此情况就变成了金陵n钗。给出n个女人和n个学生的相似度矩阵,求她们之间的匹配所能获得的最大相似度。
所谓相似度矩阵是一个nn的二维数组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

和n皇后类似,只不过对角线可以有。暴力就超时了。
用状态压缩,用n为01来表示当前的可选状态,0表示不可选,1表示可选。
所以对于第一行,所有都可选,也就是全1的状态。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>

using namespace std;
//状压+记忆化搜索 
//state的二进制中1表示当前行的这个位可选 
int a[15][15];
int dp[15][1<<14];    //dp[i][j]表示第i行选状态为j的最大值 
int n;
int dfs(int line, int state){
   
    if (dp[line][state]!=-1){
   
        return dp[line][state];
    }
    int maxx=0;
    if (line==n-1){
   
        for (int i=0; i<n; i++){
   
            int t=(1<<i);
            if (t&state){
   
                return a[line][i];
            }
        }
    }else{
   
        for (int i=0; i<n; i++){
   
            int t=(1<<i);
            if (t&state){
   
                maxx=max(maxx, a[line][i]+dfs(line+1, state-t));    //这一行选第i位,并标记 
            }
        }
    }
    return dp[line][state]=maxx; 
}
int main(){
   
    memset(dp, -1, sizeof(dp));
    scanf("%d", &n);
    for (int i=0; i<n; i++){
   
        for (int j=0; j<n; j++){
   
            scanf("%d", &a[i][j]);
        }
    } 
    int state=(1<<n)-1;
    printf("%d", dfs(0, state));
    return 0;
}
相关文章
|
10月前
|
人工智能 运维 算法
应用创新丨是时候,做一家 AI 原生企业了
当 AI 能力就是业务本身,这不仅是一次技术迭代,更是一场关于创新范式的深层变革。
应用创新丨是时候,做一家 AI 原生企业了
|
机器学习/深度学习 算法 数据挖掘
最优化--梯度下降法--牛顿法(详解)
最优化--梯度下降法--牛顿法(详解)
2597 1
|
运维 Kubernetes Devops
2025年10款主流开源自动化部署工具介绍
随着企业数字化转型加速,DevOps理念普及,自动化部署工具成为提升软件交付效率的关键。本文盘点2025年最具代表性的10款开源部署工具,涵盖从中小企业到大型企业的多样化需求,助力技术团队精准选型,打造高效、稳定的持续交付体系。
3161 0
|
数据安全/隐私保护 UED 异构计算
【大模型私有化部署要花多少钱?】一张图看懂你的钱用在哪
本文探讨了高性价比实现DeepSeek大模型私有化部署的方法,分为两部分: 一是定义大模型性能指标,包括系统级(吞吐量、并发数)与用户体验级(首token生成时间、单token生成时间)指标,并通过roofline模型分析性能瓶颈; 二是评估私有化部署成本,对比不同硬件(如H20和4090)及模型选择,结合业务需求优化资源配置。适合关注数据安全与成本效益的企业参考。
【大模型私有化部署要花多少钱?】一张图看懂你的钱用在哪
|
机器学习/深度学习 人工智能 算法
详解AI作画算法原理
AI作画算法运用深度学习和生成对抗网络(GAN),通过学习大量艺术作品,模拟艺术家风格。卷积神经网络(CNN)提取图像特征,GAN中的生成器和判别器通过对抗训练生成艺术图像。循环神经网络和注意力机制可提升作品质量。这种技术开创了艺术创作新途径。
|
数据采集 资源调度 算法
【数据挖掘】十大算法之K-Means K均值聚类算法
K-Means聚类算法的基本介绍,包括算法步骤、损失函数、优缺点分析以及如何优化和改进算法的方法,还提到了几种改进的K-Means算法,如K-Means++和ISODATA算法。
2670 4
|
网络协议 Linux
CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org;"之解决办法(换源)
CentOS7 yum安装报错“Could not resolve host: mirrorlist.centos.org; Name or service not known“之解决办法(换源)
|
运维 Kubernetes 监控
深入了解Rancher Desktop设置
通过深入了解Rancher Desktop的设置,你可以更好地利用它来进行Kubernetes应用程序的开发和测试,提高工作效率和开发体验。
1251 1

热门文章

最新文章