DP——状态压缩dp
状态压缩DP
蒙德里安的梦想
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;const int N = 12, M = 1 << 12;int n, m;
long long f[N][M];
bool st[M];int main()
{while(cin >> n >> m, n || m){memset(f, 0, sizeof f);//预处理奇数个0的状态,将其标记for(int i = 0; i < 1 << n; i ++){st[i] = true;int cnt = 0;//将每一位取出来for(int j = 0; j < n; j ++){if(i >> j & 1){if(cnt & 1){st[i] = false;break;}}else cnt ++;}if(cnt & 1) st[i] = false;}f[0][0] = 1; //第0列只有竖着摆放一种情况for(int i = 1; i <= m; i ++){for(int j = 0; j < 1 << n; j ++){for(int k = 0; k < 1 << n; k ++){//是否可以从i-1列的第k个状态转移过来if((j & k) == 0 && st[j | k]){f[i][k] += f[i - 1][j];}}}}//第m列全0,就代表0~m-1列已经摆放合法cout << f[m][0] << endl;}return 0;
}
最短Hamilton路径
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;const int N = 20, M = 1 << N;int n;
int w[N][N];
int f[M][N];int main()
{cin >> n;memset(w, 0x3f, sizeof w);for(int i = 0; i < n; i ++)for(int j = 0; j < n; j ++)cin >> w[i][j];memset(f, 0x3f, sizeof f);f[1][0] = 0; //初始时只有0号点for(int i = 0; i < 1 << n; i ++){//枚举当前状态的最后一个点jfor(int j = 0; j < n; j ++){if((i >> j) & 1){// i-(1<<j)是上一个状态,即j位上是0for(int k = 0; k < n; k ++){//枚举到上一个状态的终点k,求最小值if(i - (1 << j) >> k & 1) f[i][j] = min(f[i][j], f[i - (1 << j)][k] + w[k][j]);}}}}cout << f[(1 << n) - 1][n - 1] << endl;return 0;
}
DP——状态压缩dp相关推荐
- AcWing 327 玉米田 题解 (动态规划—DP—状态压缩DP)
原题传送门 #include<bits/stdc++.h>using namespace std;const int N = 14, M = 1 << 12, mod = 1e ...
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- POJ 2411 Mondriaan‘s Dream(最清楚好懂的状压DP讲解)(连通性状态压缩DP)
poj 2411 Mondriaan's Dream(最清晰的状压DP解析) 闫氏DP大法好 我们这里是一列一列地来,因为是一个棋盘性的状态压缩DP,从哪个方向都一样 摆放的小方格总方案数 等价于 横 ...
- BZOJ1688|二进制枚举子集| 状态压缩DP
Disease Manangement 疾病管理 Description Alas! A set of D (1 <= D <= 15) diseases (numbered 1..D) ...
- hdu1074 状态压缩dp+记录方案
题意: 给你一些作业,每个作业有自己的结束时间和花费时间,如果超过结束时间完成,一天扣一分,问你把n个作业完成最少的扣分,要求输出方案. 思路: 状态压缩dp,记录方案数的地方 ...
- FZU-2218 Simple String Problem(状态压缩DP)
原题地址: 题意: 给你一个串和两个整数n和k,n表示串的长度,k表示串只有前k个小写字母,问你两个不含相同元素的连续子串的长度的最大乘积. 思路: 状态压缩DP最多16位,第i位的状态表示第i位字母 ...
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 91. 最短Hamilton路径:位运算、状态压缩dp、dp
文章目录 题目解答 题目链接 题目解答 分析: 状态压缩dp是用二进制数来表示状态. 数据范围n = 20, 那么状态总量就是2202^{20}220个状态. 可以按照以下思路去思考: 哪些点被用过 ...
- 状态压缩DP AcWing算法提高课 (详解)
基础课的状态压缩点这里 基础课中 蒙德里安的梦想 属于 棋盘式状态压缩dp,最短Hamilton路径 属于 集合状态压缩dp 1064. 小国王(棋盘式/基于连通性) 这种棋盘放置类问题,在没有事先知 ...
- hdu 5067(状态压缩dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5067 解题思路:这道题开始想复杂了,想用bfs去求出最短距离,其实没必要,因为题目中没有阻碍关系,所以 ...
最新文章
- linux内核采取,采用动态加载模块的方式Linux内核编译
- 第十五届全国大学生智能汽车竞赛华东区赛程
- Java实战equals()与hashCode()
- Openstack-mitakaCentos7.2双节点搭建--(一)基础服务搭建
- javascript --- 实现Ajax的代码
- 【离散数学中的数据结构与算法】五 排列与组合一
- 中国军事可穿戴传感器行业市场供需与战略研究报告
- Windows游戏编程大师技巧笔记(一些基础)
- java的Apollo的功能_Apollo配置中心
- 可以插卡的ipad_如何使用Mac或者ipad打电话
- 一起谈.NET技术,Microsoft NLayerApp案例理论与实践 - 项目简介与环境搭建
- Wireless Network概念解析
- 用 QT实现拖放(drag-drop)功能
- 以下是一段歌词,请从这段歌词中统计出朋友出现的次数。 这些年一个人,风也过,雨也走,有过泪,有过错, 还记得坚持甚么,真爱过才会懂,会寂寞会回首,终有梦终有你在心中。 朋友一生一起走,那些日子不再
- 《HarmonyOS开发 - 小凌派-RK2206开发笔记》第1章 开发环境搭建
- 半导体设备英文缩写_涨知识!晶圆制造主要设备一览。
- java 程序员发展
- mscorsvw.exe
- pil库修改图片大小_使用PIL改变图像格式及尺寸
- bilibili mac客户端 哔哩哔哩 b站mac客户端
热门文章
- c/c++ 一维数组、二维数组作为函数参数、返回值
- android logo动画,Android logo与开机动画
- Python3 去掉json中带的注释
- 探究前端的跑马灯效果是如何用css实现的
- matlab指数跟踪优化模型,基于聚类选股的上证50指数跟踪遗传算法优化模型研究...
- 大众点评在线笔试题目
- 光流传感器 定位精度_【论文精选】基于光流定位的自动路径规划清扫机器人...
- python控制苹果手机流量_配置ubunto 流量使用限制 python 实现简单 http server
- 图数据结构学习:无向图
- 深富策略股票配资方式大盘分析:市场探底回升 权重全天压盘拖累指数