问题描述:

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(动态规划-状态压缩)相关推荐

  1. 0x56. 动态规划 - 状态压缩DP(习题详解 × 7)

    目录 Problem A. 最短Hamilton路径 ProblemB. 蒙德里安的梦想 Problem C. Corn Fields Problem D. 小国王 Problem E. 炮兵阵地 P ...

  2. 动态规划+状态压缩思路解决旅行者问题

    问题描述 小明目前在做一份毕业旅行的规划.打算从北京出发,分别去若干个城市,然后再回到北京,每个城市之间均乘坐高铁,且每个城市只去一次.由于经费有限,希望能够通过合理的路线安排尽可能的省一些路上的花销 ...

  3. 动态规划——状态压缩dp

    文章目录 概述 状态压缩 使用条件 状压dp 位运算 棋盘(基于连通性)类问题 概述 例题 蒙德里安的梦想 小国王 玉米田 炮兵阵地 集合类问题 概述 例题 最短Hamilton路径 愤怒的小鸟 总结 ...

  4. 由NP完全问题引出动态规划——状态压缩DP

    " 所有部分都应当在非强制的情况下组合回一起.要记住,你重组的那部分原来就是你拆解的.因此,如果你不能让它们组合回来的话,那一定是有原因的.要想尽一切办法,除了用锤头." – IB ...

  5. POJ-1185 炮兵阵地 动态规划+状态压缩

    由于递推的时候依赖于三个连续层的关系.一开始想着直接三重for循环,但是这里有个问题就是上一层的0位置上包括着上上层是0和1两种可能,而后者又对当前行有约束,因此该方法不行.当然有一个办法就是增加状态 ...

  6. hdu 3006(状态压缩)

    题意:给一些集合,取一部分集合合并能够得到多少个新集合. 解题思路:这道题数字最多只有14,可以用状态压缩去做,每一位代表某个数,0代表不取,1代表取这个数.剩下的就是去模拟状态了.不多讲,输入状态压 ...

  7. hdu 5418(状态压缩dp+Floyd)

    点击打开链接 解题思路:这道题目和TSP问题很相似,唯一不同的是同一个点可以重复走几次.... 这道题目只有16个顶点,所以很容易想到状态压缩dp,dp[i][j]表示到达顶点i时的状态为j的最小花费 ...

  8. POJ 1185 炮兵阵地(动态规划+状态压缩)

    炮兵阵地 Description 司令部的将军们打算在N*M的网格地图上部署他们的炮兵部队.一个N*M的地图由N行M列组成,地图的每一格可能是山地(用"H" 表示),也可能是平原( ...

  9. sdoi2009 [动态规划 状态压缩DP] 学校食堂

    背景 飘逸的EWF组合~ 描述 小F的学校在城市的一个偏僻角落,所有学生都只好在学校吃饭.学校有一个食堂,虽然简陋,但食堂大厨总能做出让同学们满意的菜肴.当然,不同的人口味也不一定相同,但每个人的口味 ...

最新文章

  1. Python中的pickle模块
  2. 探讨ASP.NET 2.0中的Web控件改进技术(3)
  3. 为什么有些画面让你终生难忘?GAN来告诉你原因
  4. 别再说自己不会了!最新高频Java笔试题分享
  5. oracle创建用户、授予权限及删除用户
  6. (JAVA学习笔记) 冒泡排序算法
  7. ppt转html格式
  8. iOS标准库中常用数据结构和算法之二叉排序树
  9. 根据application ID打印该application所包含的object
  10. mysql5717开发设置怎么调回来_华为手机这几个默认设置,一定要关闭,再也不卡顿...
  11. tiny4412u-boot烧写及根文件系统制作(不进入终端问题)
  12. 火星民众彻夜排队接种飞鸽传书
  13. Oracle 19.6 的有趣BUG:可能引发 CLOB 存储数据的丢失
  14. SAP License:FICO面试问题
  15. 深度解析SDN——利益、战略、技术、实践(实战派专家力作,业内众多专家推荐)
  16. 都说苹果秋季发布会像一杯白开水,那么...
  17. html鼠标经过小手,css鼠标小手
  18. PowerBI制作报表背景图
  19. android 获取短信中心号码,无法发短信,短信中心号码设置 解决办法!!!
  20. MVC 生成PDf表格并插入图片

热门文章

  1. java 商品多规格_大家有做过商品多规格的功能嘛?商品的不同规格对应不同价格和库存一般是如何实现的?...
  2. 计算机版兰花草音乐,兰花草儿歌mp3
  3. Delphi XE10 精简 支持 Android 、 IOS 跨平台开发
  4. 微信转发朋友圈小视频
  5. 写给中高级前端关于性能优化的9大策略和6大指标 | 网易四年实践
  6. 点击button按钮实现全选_全选按钮(简单实现)
  7. 计算机网络——数据链路层(三个基本问题)
  8. 浅谈短剧授权推广,会简单视频剪辑即可。
  9. Fifth season ninth episode,do not touch my Sandwich!!!hahaha
  10. 达梦数据库集群节点磁盘性能测试