备战蓝桥杯---状态压缩DP基础2之TSP问题

先来一个题衔接一下:

与上一题的思路差不多,不过这里有几点需要注意:

1.因为某一列的状态还与上上一行有关,因此我们令f[i][j][k]表示第i行状态为j,第i-1行状态为k的最大炮兵数。

因此,我们可以得到状态转移方程:f[i][j][k]=max(f[i][j][k],f[i-1][k][q]+num[j])其中我们保证j,k,q不冲突并且自己可以。

2.注意到直接开存不下,我们考虑用vector存符合条件的,并计算一下有几个再开空间。

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[110],dp[110][70][70];
vector<int> st;
char b;
vector<int> num;
int calc(int num){int ans=0;while(num){if((num&1)==1) ans++;num>>=1;}return ans;
}
int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){scanf(" %c",&b);if(b=='H'){a[i]|=(1<<(j-1));}}}for(int i=0;i<=(1<<m)-1;i++){if(i&(i<<1)) continue;if(i&(i<<2)) continue;st.push_back(i);num.push_back(calc(i));}int ans=0;for(int i=1;i<=n;i++){for(int j=0;j<st.size();j++){if((a[i]&st[j])) continue;for(int k=0;k<st.size();k++){if((a[i-1]&st[k])) continue;if((st[k]&st[j])) continue;for(int q=0;q<st.size();q++){if(i>=2){if((a[i-2]&st[q])) continue;}if((st[k]&st[q])) continue;if((st[q]&st[j])) continue;dp[i][j][k]=max(dp[i][j][k],dp[i-1][k][q]+num[j]);ans=max(ans,dp[i][j][k]);}}}}cout<<ans;
}

首先,什么是TSP问题?

即给你一张抽象的图,求从某一个起点出发,经过所有点的最短路径。

如何解决呢?

我们先建立一个超级源点,这就解决了从某一个起点出发的问题,然后,我们假设走了134,现在在5,那么后来的267是与134的走法无关的,因此我们只要保留最短的即可,即DP。

因此,我们可以令f[st][i]表示当前状态为st,最后到达的一个点为i所经过的最短路径。

访问过标1,未访问标0.

转移方程为f[st][i]=min(f[st'][j]+a[j][i]).(st'=st-1<<(i-1)).

若为必须回到原点,那么走出来的一定是一个圈,因此我们固定1为起点,然后在原来的结果上加上终点与1的边。

下面是实现代码:

#include<bits/stdc++.h>
using namespace std;
int n,m,a[25][25],dp[1<<20][25];
int f(int st,int x){if(dp[st][x]<=1e9){return dp[st][x];}int stt=st-(1<<(x-1));for(int i=1;i<=n;i++){if(a[i][x]==0) continue;if((stt>>(i-1))&1){dp[st][x]=min(dp[st][x],a[i][x]+f(stt,i));}}return dp[st][x];
}
int main(){cin>>n>>m;for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;a[x][y]=z;a[y][x]=z;}memset(dp,0x7f,sizeof(dp));dp[1][1]=0;int ans=0x7f7f7f7f;int st=(1<<n)-1;for(int i=2;i<=n;i++){int tmp=f(st,i);if(a[i][1]!=0) ans=min(ans,a[i][1]+tmp);}cout<<ans;
} 

我们来看一个类似的问题:

思路类似,我们令f[i]表示状态为i时获得的最大能量。

其中第k位==1表示它已经用了并消失,为0表示没有用或用了没消失。

易得状态转移方程:f[k|(1<<(i-1)]=max(f[k]+a[j][i]).我们转换一下:

f[k]=max(f[k']+a[j][i])(其中k'的i与j位为0,k=k'+1<<(i-1))

下面是AC代码:

#include<bits/stdc++.h>
using namespace std;
int n,a[14][14],x,f[2000];
int main(){while(cin>>n){memset(f,0,sizeof(f));if(n==0) break;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){scanf("%d",&x);a[i][j]=x;}}int ans=0;for(int i=1;i<=(1<<n)-2;i++){for(int k=0;k<i;k++){for(int ii=1;ii<=n;ii++){if((k>>(ii-1))&1) continue;for(int jj=1;jj<=n;jj++){if((k>>(jj-1))&1) continue;if(i!=(k|(1<<(jj-1)))) continue;f[i]=max(f[i],f[k]+a[ii][jj]);ans=max(ans,f[i]);}}}}printf("%d\n",ans);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/717326.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af

成功解决git clone遇到的error: RPC failed; curl 16 Error in the HTTP2 framing layer fatal: expected flush af 问题描述解决方案 问题描述 用git的时候可能会遇到这个问题&#xff1a; (base) zhouzikang7443-8x4090-120:~/project$ git clone https://github.com/123/12…

Windows服务器:通过nginx反向代理配置HTTPS、安装SSL证书

先看下效果&#xff1a; 原来的是 http&#xff0c;配置好后 https 也能用了&#xff0c;并且显示为安全链接。 首先需要 SSL证书 。 SSL 证书是跟域名绑定的&#xff0c;还有有效期。 windows 下双击可以查看相关信息。 下载的证书是分 Apache、IIS、Tomcat 和 Nginx 的。 我…

【leetcode】圆圈中最后剩下的数字

目录 1. 问题 2. 思路 3. 代码 4. 运行 1. 问题 本题即为典型的约瑟夫问题&#xff0c;通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人&#xff0c;原始问题变成从n-1个人中每隔m个数踢出一个人…… 示例 1&#xff1a; 输入: n 5, m 3 输出: 3…

Unity TMP文字移动效果

前言 看见很多游戏有很特殊的波浪形文字效果&#xff0c;于是来尝试一下控制TMP文字顶点的方式达到类似效果。 原理 挂载tmp text&#xff0c;在里面随便放入非空格字符。 tmp text组件开放了textInfo接口&#xff0c;也就是GetComponent<TextMeshProUGUI>().textInfo…

两天学会微服务网关Gateway-Gateway简介

锋哥原创的微服务网关Gateway视频教程&#xff1a; Gateway微服务网关视频教程&#xff08;无废话版&#xff09;_哔哩哔哩_bilibiliGateway微服务网关视频教程&#xff08;无废话版&#xff09;共计17条视频&#xff0c;包括&#xff1a;1_Gateway简介、2_Gateway工作原理、3…

使用.NET开发VSTO工具快速将PPT导出为图片

本文主要介绍如何使用.NET开发 PowerPoint VSTO 外接程序&#xff0c;并实现快速的将当前页PPT导出为图片的功能。可以帮助你了解如何使用 VSTO 开发 Office 外接程序&#xff0c;以及如何操作 PowerPoint 的对象模型。 1. 背景 在日常的文章写作中&#xff0c;我经常使用 PPT…

JUC并发编程 深入学习Java并发编程【上】

JUC并发编程&#xff0c;深入学习Java并发编程&#xff0c;与视频每一P对应&#xff0c;全系列6w字。 P1-5 为什么学特色预备知识 进程线程概念 进程&#xff1a; 一个程序被运行&#xff0c;从磁盘加载这个程序的代码到内存&#xff0c;就开起了一个进程。 进程可以视为程…

JVM相关问题

JVM相关问题 一、Java继承时父子类的初始化顺序是怎样的&#xff1f;二、JVM类加载的双亲委派模型&#xff1f;三、JDK为什么要设计双亲委派模型&#xff0c;有什么好处&#xff1f;四、可以打破JVM双亲委派模型吗&#xff1f;如何打破JVM双亲委派模型&#xff1f;五、什么是内…

Spring Cloud Gateway-系统保护Sentinel集成

文章目录 Sentinel介绍Spring Cloud Gateway集成Sentinelpom依赖Sentinel配置Sentinel集成Nacos作为数据源自定义降级响应 Sentinel介绍 ​ 随着微服务的流行&#xff0c;服务和服务之间的稳定性变得越来越重要。Sentinel 是面向分布式、多语言异构化服务架构的流量治理组件&a…

HTML5:七天学会基础动画网页6

CSS3自定义字体 ①&#xff1a;首先需要下载所需字体 ②&#xff1a;把下载字体文件放入 font文件夹里&#xff0c;建议font文件夹与 css 和 image文件夹平级 ③&#xff1a;引入字体&#xff0c;可直接在html文件里用font-face引入字体&#xff0c;分别是字体名字和路径 例…

Django官网项目

项目准备 使用VSCODE做IDE。 检查Python版本。 sudo apt install sudo apt update python3 --version创建项目路径&#xff0c;创建虚拟环境&#xff0c;创建项目 路径 \mysite 进入路径&#xff0c;运行VSCODE 运行 "code ." 创建虚拟环境。 选择 >python: c…

【推荐算法系列十七】:GBDT+LR 排序算法

排序算法经典中的经典 参考 推荐系统之GBDTLR 极客时间 手把手带你搭建推荐系统 课程 逻辑回归&#xff08;LR&#xff09;模型 逻辑回归&#xff08;LR,Logistic Regression&#xff09;是一种传统机器学习分类模型&#xff0c;也是一种比较重要的非线性回归模型&#xff…

AAAI2024-分享若干篇有代码的优秀论文-图神经网络、时间序列预测、知识图谱、大模型等

图神经网络、大模型优化方向系列文章目录 为了方便大家根据自己的兴趣查看自己的研究方向论文&#xff0c;在这里进行了细分。如果有对其中的论文感兴趣的&#xff0c;可以查看对应的文章在论文相应的代码&#xff0c;方便快速上手学习&#xff0c;也可以借助这些代码的学习快…

Avalonia学习(二十九)-仪表

Avalonia制作仪表盘&#xff0c;把控件给大家演示一下&#xff0c;Avalonia有三类自定义控件&#xff0c;分别是用户控件、模版控件、自主控件。前面已经很多用户控件了&#xff0c;这个是演示模版控件&#xff0c;另外一种不知道哪种情况下使用。 前端代码&#xff1a; <…

想从事数据方向职场小白看过来, 数据方面的一些英文解释

想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 文章目录 想从事数据方向职场小白看过来&#xff0c;一些英文名词解释 英文类解释NoSQL&#xff1a;ESB&#xff1a;ACID &#xff1a;Data Vault&#xff1a;MDM&#xff1a;OLAP&#xff1a;SCD:SBA&#xff1a;MP…

Pandas DataFrame 基本操作实例100个

Pandas 是一个基于NumPy的数据分析模块&#xff0c;最初由AQR Capital Management于2008年4月开发&#xff0c;并于2009年底开源。Pandas的名称来源于“Panel Data”&#xff08;面板数据&#xff09;和“Python数据分析”&#xff08;data analysis&#xff09;。这个库现在由…

来不及了!大学必须完成的四件事!

老师们常说&#xff0c;上大学就轻松了 其实不然 大学不是人生的终点&#xff0c;而是新的起跑线 不是休息站&#xff0c;而是进入社会的最后冲刺跑道 大学生活苦乐参半&#xff0c;成人世界即将来临 出了校门&#xff0c;你会发现社会复杂多变&#xff0c;需要不断学习 稍…

excel中如何使用VLOOKUP和EXACT函数实现区分大小写匹配数据

在 Excel 中&#xff0c;VLOOKUP 函数默认情况下是不区分大小写的&#xff1a; 比如下面的案例&#xff0c;直接使用VLOOKUP函数搜索&#xff0c;只会搜索匹配到不区分大小写的第一个 如果我们想要实现区分大小写的精确匹配&#xff0c;可以使用 EXACT 函数结合 VLOOKUP 函数 …

【简说八股】Redisson的守护线程是怎么实现的

Redisson Redisson 是一个 Java 语言实现的 Redis SDK 客户端&#xff0c;在使用分布式锁时&#xff0c;它就采用了「自动续期」的方案来避免锁过期&#xff0c;这个守护线程我们一般也把它叫做「看门狗」线程。 Redission是一个在Java环境中使用的开源的分布式缓存和分布式锁实…

PyTorch-卷积神经网络

卷积神经网络 基本结构 首先解释一下什么是卷积&#xff0c;这个卷积当然不是数学上的卷积&#xff0c;这里的卷积其实表示的是一个三维的权重&#xff0c;这么解释起来可能不太理解&#xff0c;我们先看看卷积网络的基本结构。 通过上面的图我们清楚地了解到卷积网络和一般网…