动态规划(算法竞赛、蓝桥杯)--乱杀的状态压缩DP

1、B站视频链接:E25 状态压缩DP 小国王_哔哩哔哩_bilibili

题目链接:[SCOI2005] 互不侵犯 - 洛谷

ee3a64a4243e45a99df9a013acbbed94.png

733895e5f0b849baa6fa83240d460c1c.png

28ae8c09da6d4c4d85c8ea09896383ea.png

fd98032ee26c4a02a604d68240f35272.png

e94b76f720d9470ca48c0c37139a41e3.png

#include <bits/stdc++.h> 
using namespace std;
int n,k;//棋盘行数、国王总数
int cnt;//一行合法状态的个数
int s[1<<12];//一行合法状态集,2的12次方钟状态
int num[1<<12];//每个合法状态包含的国王数
long long f[12][144][1<<12];
//f[i,j,a]//表示前i行已经放了j个国王,
//第i行的第a个状态时的方案数int main(){cin>>n>>k;//预处理,选出合法状态和合法状态下的国王数 for(int i=0;i<(1<<n);i++){//枚举一行所有的状态 if(!(i&i>>1)){//如果不存在相邻的1 s[cnt++]=i;//记录一行合法的状态集 for(int j=0;j<n;j++){num[i]+=(i>>j&1);//每个合法状态包含的国王数 }}
}f[0][0][0]=1;//边界 for(int i=1;i<=n+1;i++){//枚举行 for(int j=0;j<=k;j++){//枚举国王数 for(int a=0;a<cnt;a++){//枚举第i行的合法状态 for(int b=0;b<cnt;b++){//枚举第i-1行的合法状态 int c=num[s[a]];//第i行第a个状态的国王数if((j>=c) //可以继续放国王 &&!(s[b]&s[a])//不存在同列的1 &&!(s[b]&(s[a]<<1))//不存在写对角的1 &&!(s[b]&(s[a]>>1))){ f[i][j][a]+=f[i-1][j-c][b];//行间状态转移(累加求和) } }}}
} cout<<f[n+1][k][0]<<endl;//第n+1行不放国王的方案数,省去了累加步骤 return 0;
}

cf7e8e9377214af7bb0a52c74702e141.png

0a3faed2921448a1bed55a047b118826.png

2、B站视频链接:E26 状态压缩DP 玉米田_哔哩哔哩_bilibili

题目链接:[USACO06NOV] Corn Fields G - 洛谷

4286c39255f443e68e94701640561efe.png

0630022f992544178df913ee2e3e58ec.png

435d701bffa740069e02fe26a20e9368.png

d1a30cf0b559444cbb8b1a1113b45a9f.png

#include <bits/stdc++.h> 
using namespace std;
const int P=1e8;
int n,m;
int g[14];
int cnt;
int s[1<<14];
int f[14][1<<14];
//f[i,a]表示已经种植前i行,第i行第a个状态的方案数int main(){cin>>n>>m;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){int x;cin>>x;g[i]=(g[i]<<1)+x;//各行的状态值(十进制) }}//预处理出合法状态for(int i=0;i<(1<<m);i++){//枚举状态,m列则有2的m次方种 if(!(i&i>>1)){//如果不存在相邻的1 s[cnt++]=i;} } f[0][0]=1;//状态计算for(int i=1;i<=n+1;i++){//枚举行 for(int a=0;a<cnt;a++){//枚举第i行的合法状态 for(int b=0;b<cnt;b++){//枚举第i-1行的 if(!(s[a]&s[b])//不能同列均为1 &&(s[a]&g[i])==s[a]){//种在肥沃土地上 f[i][a]=(f[i][a]+f[i-1][b])%P;}}}} printf("%d\n",f[n+1][0]);return 0;
} 

3、B站视频链接:E27 状态压缩DP 炮兵部队_哔哩哔哩_bilibili

题目链接:[NOI2001] 炮兵阵地 - 洛谷

648854cd272a4bf08a00b749e371616c.png

e026068899b74a299155e39a5f586f77.png

b2caddd0513949d7906b86f7a6163061.png

9e09ad2c840d4cafa8981b401c72b919.png

 

#include <bits/stdc++.h> 
using namespace std;
const int N=110, M=1<<10;
int n,m;    //行数,列数 
int g[N];   //存储地图各行数值
int cnt;    //一行的合法状态个数
int s[M];   //一行的合法状态集 
int num[M]; //每个合法状态包含1的个数 
int f[N][M][M]; //110*1024*1024*4 = 440MB
// f[i][a][b]表示已放好前i行,
// 第i行第a个状态,第i-1行第b个状态时,能放置的最大数量 int main(){cin>>n>>m;for(int i=1;i<=n;i++)for(int j=0;j<m;j++){char c; cin>>c; if(c=='P') g[i]+=1<<(m-j-1); //地图各行数值          }for(int i=0; i<(1<<m); i++)   //枚举一行的所有状态 if(!(i&i>>1) && !(i&i>>2)){ //如果不存在11和101 s[cnt++]=i;               //保存一行的合法状态for(int j=0; j<m; j++)num[i]+=(i>>j&1);         //每个合法状态包含1的个数}for(int i=1; i<=n+2; i++) //枚举行for(int a=0; a<cnt; a++)  //枚举第i行合法状态for(int b=0; b<cnt; b++)  //枚举第i-1行合法状态for(int c=0; c<cnt; c++)  //枚举第i-2行合法状态if(!(s[a]&s[b])&&!(s[a]&s[c])&&!(s[b]&s[c])&&(g[i]&s[a])==s[a]&&(g[i-1]&s[b])==s[b])f[i][a][b]=max(f[i][a][b],f[i-1][b][c]+num[s[a]]);cout<<f[n+2][0][0]<<endl;return 0;
}

a4b900c5c3604962a65612bb4fb52d10.png

#include <bits/stdc++.h> 
using namespace std;
const int N=110, M=1<<10;
int n,m;    //行数,列数 
int g[N];   //存储地图各行数值
int cnt;    //一行的合法状态个数
int s[M];   //一行的合法状态集 
int num[M]; //每个合法状态包含1的个数 
int f[2][M][M]; //滚动数组 2*1024*1024*4 = 8MB
// f[i][a][b]表示已放好前i行,
// 第i行第a个状态,第i-1行第b个状态时,能放置的最大数量 int main(){cin>>n>>m;for(int i=1;i<=n;i++)for(int j=0;j<m;j++){char c; cin>>c; if(c=='P') g[i]+=1<<(m-j-1); //地图各行数值          }for(int i=0; i<(1<<m); i++)   //枚举一行的所有状态 if(!(i&i>>1) && !(i&i>>2)){ //如果不存在11和101 s[cnt++]=i;               //保存一行的合法状态for(int j=0; j<m; j++)num[i]+=(i>>j&1);         //每个合法状态包含1的个数}for(int i=1; i<=n+2; i++) //枚举行for(int a=0; a<cnt; a++)  //枚举第i行合法状态for(int b=0; b<cnt; b++)  //枚举第i-1行合法状态for(int c=0; c<cnt; c++)  //枚举第i-2行合法状态if(!(s[a]&s[b])&&!(s[a]&s[c])&&!(s[b]&s[c])&&(g[i]&s[a])==s[a]&&(g[i-1]&s[b])==s[b])f[i&1][a][b]=max(f[i&1][a][b],f[i-1&1][b][c]+num[s[a]]);cout<<f[n+2&1][0][0]<<endl;return 0;
}

 

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

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

相关文章

GCN 翻译 - 2

2 FAST APROXIMATE CONVOLUTIONS ON GRAPHS 在这一章节&#xff0c;我们为这种特殊的的图基础的神经网络模型f(X, A)提供理论上的支持。我们考虑一个多层的图卷积网络&#xff08;GCN&#xff09;&#xff0c;它通过以下方式进行层间的传播&#xff1a; 这里&#xff0c;是无…

调用Mybatis plus中的saveBatch方法报找不到表的问题

1.问题现象 在用Mybatis plus开发的项目中&#xff0c;用自带的API批量保存的方法saveBatch操作时&#xff0c;发现报没有找到表的错误。 错误日志截图如下&#xff1a; 表实际是存在的&#xff0c;且发现其他的方法都没有问题&#xff0c;包括save、update等单个的方法&…

tomcat搭建个人博客 实现动静分离

jar包相关 .war&#xff1a;WebApp打包,类zip格式文件,通常包括一个应用的所有资源,比如jsp,html,配置文件等 .jar&#xff1a;EJB类文件的打包压缩类zip格式文件&#xff0c;,包括很多的class文件, 网景公司发明 .rar&#xff1a;资源适配器类打包文件&#xff0c;目前已不常…

TabLayout预览不了?

<TableLayoutandroid:layout_width"wrap_content"android:layout_height"wrap_content"/> 当然预览不了了&#xff0c;这其实不是我要的控件。 而实际需要的是TabLayout 不是TableLayout &#xff01;&#xff01;&#xff01; <com.google.an…

php安装kafka

我的开发环境是php7.3 ,先来部署两个php扩展&#xff0c;php7.3目录下放librdkafka.dll,ext/php_rdkafka.dll&#xff0c;php.ini增加,[rdkafka] extension php_rdkafka.dll php7.3对应的扩展包链接&#xff1a;PECL :: Package :: rdkafka 看自己php版本对应在这里找PECL :: …

一周学会Django5 Python Web开发-Django5修改视图UpdateView

锋哥原创的Python Web开发 Django5视频教程&#xff1a; 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计31条视频&#xff0c;包括&#xff1a;2024版 Django5 Python we…

融资项目——OpenFeign的降级与熔断

当一个微服务调用其他微服务时&#xff0c;如果被调用的微服务因各种原因无法在规定时间内提供服务&#xff0c;则可以直接使用本地的服务作为备选&#xff0c;即进行降级熔断。 如之前所提到的微服务为例&#xff1a; 如果希望实现降级熔断&#xff0c;可以在本地创建一个实现…

好物周刊#44:现代终端工具

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到&#xff0c;每日更新。 2. 餐饮点餐商城 针对…

蓝桥杯刷题4--数组和队列

目录: 1. 数组的应用–高精度 2. 队列 1. 数组的应用–高精度 高精度算法就是大数的计算方法。超过64位的大数计算&#xff0c;Java和Python都能直接算。竞赛中常常用到很大的数组。强烈建议不要用动态分配&#xff0c;因为动态分配需要多写代码而且容易出错。定义为全局静态…

【Linux基础(二)】进程管理

学习分享 1、程序和进程1.1、程序1.2、进程和进程ID 2、Linux下的进程结构3、init进程4、获取进程标识5、fork系统调用5.1、fork函数实例分析 6、进程的特性7、在Linux下进程指令7.1、终止进程指令7.2、查看进程指令&#xff1a;7.3、以树状图列出进程 8、多进程运行异常情况8.…

AI论文速读 | 【综述】城市计算中跨域数据融合的深度学习:分类、进展和展望

题目&#xff1a;Deep Learning for Cross-Domain Data Fusion in Urban Computing: Taxonomy, Advances, and Outlook 作者&#xff1a;Xingchen Zou, Yibo Yan, Xixuan Hao, Yuehong Hu, Haomin Wen&#xff08;温皓珉&#xff09;, Erdong Liu, Junbo Zhang&#xff08;张钧…

Latex公式太长换行标号

Latex中公式太长换行,且编号,可以采用align,不编号行公式用\nonumber,示例如下: \begin{align}\nonumber %第1行公式不编号&a+b+a+b+a+b+a+b+a+b+a+b+a+b+a\\&+c+d=m %第2行公式编号 \end{align}效果如下 原文件链接 公式不同命令的区别 \begin{align} 与 \…