HDU 3091(动态规划-状态压缩)
问题描述:
One day , Partychen gets several beads , he wants to make these beads a necklace . But not every beads can link to each other, every bead should link to some particular bead(s). Now , Partychen wants to know how many kinds of necklace he can make.
Input
It consists of multi-case .
Every case start with two integers N,M ( 1<=N<=18,M<=N*N )
The followed M lines contains two integers a,b ( 1<=a,b<=N ) which means the ath bead and the bth bead are able to be linked.
Output
An integer , which means the number of kinds that the necklace could be.
Sample Input
3 3 1 2 1 3 2 3
Sample Output
2
题目题意:给我们n棵珠,给定它们的连接规则,问有多少种项链(注意首尾相连)
题目分析:因为珠子不多,所以我们可以用数字的每一位表示珠子的状态,因为珠子的连接是有规则的,不是所有的珠子都可以相连,假设我们如果知道了前一个珠子是那个,那么后面那些珠子可以相连就确定了,所以还需要一维来表示最后一颗珠子是谁。
dp[i][j]的保存的就是在状态i下,结尾是珠子j的多少种情况。还有一点是首尾的问题,我们可以假设第一个是第一颗珠子,结果不影响,那么尾部那些就可以确定了。
代码如下:
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#define ll long long
using namespace std;ll dp[(1<<18)][20];
bool G[20][20];int main()
{int n,m;while (scanf("%d%d",&n,&m)!=EOF) {memset (G,false,sizeof (G));for (int i=1;i<=m;i++) {int a,b;scanf("%d%d",&a,&b);G[a][b]=G[b][a]=true;//保存图}memset (dp,0,sizeof (dp));dp[1][1]=1;for (int i=0;i<=((1<<n)-1);i++) {for (int j=n;j>=1;j--) {if (!dp[i][j]) continue;for (int k=1;k<=n;k++) {if (G[k][j]&&!(i&(1<<(k-1)))) dp[i|(1<<(k-1))][k]+=dp[i][j];}}}ll ans=0;for (int i=1;i<=n;i++) {if (G[1][i])//首尾相连ans+=dp[((1<<n)-1)][i];}printf("%lld\n",ans);}return 0;
}
HDU 3091(动态规划-状态压缩)相关推荐
- 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)
目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...
- 动态规划+状态压缩思路解决旅行者问题
问题描述 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销 ...
- 动态规划——状态压缩dp
文章目录 概述 状态压缩 使用条件 状压dp 位运算 棋盘(基于连通性)类问题 概述 例题 蒙德里安的梦想 小国王 玉米田 炮兵阵地 集合类问题 概述 例题 最短Hamilton路径 愤怒的小鸟 总结 ...
- 由NP完全问题引出动态规划——状态压缩DP
" 所有部分都应当在非强制的情况下组合回一起.要记住,你重组的那部分原来就是你拆解的.因此,如果你不能让它们组合回来的话,那一定是有原因的.要想尽一切办法,除了用锤头." – IB ...
- POJ-1185 炮兵阵地 动态规划+状态压缩
由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态 ...
- hdu 3006(状态压缩)
题意:给一些集合,取一部分集合合并能够得到多少个新集合. 解题思路:这道题数字最多只有14,可以用状态压缩去做,每一位代表某个数,0代表不取,1代表取这个数.剩下的就是去模拟状态了.不多讲,输入状态压 ...
- hdu 5418(状态压缩dp+Floyd)
点击打开链接 解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次.... 这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费 ...
- POJ 1185 炮兵阵地(动态规划+状态压缩)
炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...
- sdoi2009 [动态规划 状态压缩DP] 学校食堂
背景 飘逸的EWF组合~ 描述 小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味 ...
最新文章
- Python中的pickle模块
- 探讨ASP.NET 2.0中的Web控件改进技术(3)
- 为什么有些画面让你终生难忘?GAN来告诉你原因
- 别再说自己不会了!最新高频Java笔试题分享
- oracle创建用户、授予权限及删除用户
- (JAVA学习笔记) 冒泡排序算法
- ppt转html格式
- iOS标准库中常用数据结构和算法之二叉排序树
- 根据application ID打印该application所包含的object
- mysql5717开发设置怎么调回来_华为手机这几个默认设置,一定要关闭,再也不卡顿...
- tiny4412u-boot烧写及根文件系统制作(不进入终端问题)
- 火星民众彻夜排队接种飞鸽传书
- Oracle 19.6 的有趣BUG:可能引发 CLOB 存储数据的丢失
- SAP License:FICO面试问题
- 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
- 都说苹果秋季发布会像一杯白开水,那么...
- html鼠标经过小手,css鼠标小手
- PowerBI制作报表背景图
- android 获取短信中心号码,无法发短信,短信中心号码设置 解决办法!!!
- MVC 生成PDf表格并插入图片
热门文章
- java 商品多规格_大家有做过商品多规格的功能嘛?商品的不同规格对应不同价格和库存一般是如何实现的?...
- 计算机版兰花草音乐,兰花草儿歌mp3
- Delphi XE10 精简 支持 Android 、 IOS 跨平台开发
- 微信转发朋友圈小视频
- 写给中高级前端关于性能优化的9大策略和6大指标 | 网易四年实践
- 点击button按钮实现全选_全选按钮(简单实现)
- 计算机网络——数据链路层(三个基本问题)
- 浅谈短剧授权推广,会简单视频剪辑即可。
- Fifth season ninth episode,do not touch my Sandwich!!!hahaha
- 达梦数据库集群节点磁盘性能测试