Necklace

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)
Total Submission(s): 709    Accepted Submission(s): 245

Problem Description
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
 
Source
 
  1. /*
  2. 已经给了时间看题解了,正式练习一道题三天之内不准再看题解!
  3. */
  4. #include<iostream>
  5. #include<string.h>
  6. #include<stdio.h>
  7. #define N (1<<18)+5
  8. #define M 20
  9. #define INF 0x3f3f3f3f
  10. using namespace std;
  11. long long dp[N][M],g[M][M],n,m;//dp[i][j]表示在i个状态下,你到达j这个点的方案数
  12. int main()
  13. {
  14. //freopen("in.txt", "r", stdin);
  15. while(scanf("%lld%lld",&n,&m)!=EOF)
  16. {
  17. memset(dp,0,sizeof dp);
  18. memset(g,0,sizeof g);
  19. int a,b;
  20. for(int i=0;i<m;i++)
  21. {
  22. scanf("%lld%lld",&a,&b);
  23. g[a-1][b-1]=g[b-1][a-1]=1;
  24. }
  25. int tol=(1<<n);
  26. dp[1][0]=1;
  27. for(int i=1;i<tol;i++)
  28. {
  29. for(int j=0;j<n;j++)//枚举你要经过的中间点
  30. {
  31. if(dp[i][j]==0) continue;//上一个状态没有方案数的讨论没意义
  32. //cout<<"ok"<<endl;
  33. for(int k=1;k<n;k++)//枚举你这个状态最终要到达的终点
  34. {
  35. if(!(i&(1<<k))&&g[j][k])
  36. {
  37. //cout<<"ok"<<endl;
  38. dp[i|(1<<k)][k]+=dp[i][j];
  39. }
  40. }
  41. }
  42. }
  43. long long s=0;
  44. for(int i=0;i<n;i++)
  45. {
  46. //cout<<dp[tol-1][i]<<" ";
  47. if(g[0][i])
  48. s+=dp[tol-1][i];
  49. }
  50. //cout<<endl;
  51. printf("%lld\n",s);
  52. }
  53. return 0;
  54. }

  

 

hdu 3091 Necklace(状态压缩类似于TSP问题)的更多相关文章

  1. hdu 3091 Necklace 状态压缩dp *******

    Necklace Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 327680/327680 K (Java/Others)Total ...

  2. hdu 5094 Maze 状态压缩dp+广搜

    作者:jostree 转载请注明出处 http://www.cnblogs.com/jostree/p/4092176.html 题目链接:hdu 5094 Maze 状态压缩dp+广搜 使用广度优先 ...

  3. hdu 5724 SG+状态压缩

    Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  4. hdu 4272 LianLianKan 状态压缩

      LianLianKan Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tot ...

  5. HDU 5724 Chess (状态压缩sg函数博弈) 2016杭电多校联合第一场

    题目:传送门. 题意:有n行,每行最多20个棋子,对于一个棋子来说,如果他右面没有棋子,可以移动到他右面:如果有棋子,就跳过这些棋子移动到后面的空格,不能移动的人输. 题解:状态压缩博弈,对于一行2^ ...

  6. hdu 1429(bfs+状态压缩)

    题意:容易理解,但要注意的地方是:如果魔王回来的时候刚好走到出口或还未到出口都算逃亡失败.因为这里我贡献了一次wa. 分析:仔细阅读题目之后,会发现最多的钥匙数量为10把,所以把这个作为题目的突破口, ...

  7. hdu 2489 最小生成树状态压缩枚举

    思路: 直接状态压缩暴力枚举 #include<iostream> #include<algorithm> #include<cstdio> #include< ...

  8. LianLianKan - HDU 4272(状态压缩)

    题目大意:有一列数据,可以从最上面的开始连接下面相同的元素,然后消除,不过距离不能超过6,询问最后能不能消除完整个数列. 分析:首先讨论一点最远能消除的地方,比如点的位置是x,如若想要消除x+1位置处 ...

  9. HDU 3001(状态压缩dp)

    状态压缩dp的第一题! 题意:Mr ACMer想要进行一次旅行,他决定访问n座城市.Mr ACMer 可以从任意城市出发,必须访问所有的城市至少一次,并且任何一个城市访问的次数不能超过2次.n座城市间 ...

随机推荐

  1. C/C++ 进程通讯(命名管道)

    服务端代码: // pipe_server.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <stdio.h> ...

  2. 初识oracle存储过程

    参见:http://www.cnblogs.com/linjiqin/archive/2011/04/16/2018411.html 1.存储过程的语法结构: CREATE OR REPLACE PR ...

  3. ThinkPHP中:检查Session是否过期

    1.创建Session public function index(){ $sess_time=time(); session('name','andy'); session('time_stamp' ...

  4. Linux学习——shell编程之正则表达式和字符处理命令

    shell编程之正则表达式 一 正则表达式 1 什么是正则表达式 正则表达式用于描述字符排列和匹配模式的一种语法规则.它主要用于字符串的模式分隔.匹配.查找及替换操作. 2 shell编程之正则表达式 ...

  5. [js高手之路] html5 canvas动画教程 - 实时获取鼠标的当前坐标

    有了前面的canvas基础之后,现在开始就精彩了,后面写的canvas教程都是属于综合应用,前面已经写了常用的canvas基础知识,参考链接如下: [js高手之路] html5 canvas系列教程 ...

  6. Linux入门之常用命令(13) date

    在linux shell编程中,经常用到日期的加减运算 以前都是自己通过expr函数计算,很麻烦 其实date命令本身提供了日期的加减运算 非常方便.例如:得到昨天的时间date +%Y%m%d -- ...

  7. 纯CSS3实现轮播图

    前言 纯css3实现的轮播图效果,和JavaScript控制的相比,简单高效了很多,但是功能也更加单一,只有轮播不能手动切换. 用什么实现的呢?页面布局 + animation动画 HTML部分 &l ...

  8. Window2008 R2(64位)使用codesmith连接Sqlite

    ①打开C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Config目录,找到machine.config文件新增 <add name=" ...

  9. jquery系列教程6-ajax的应用全解

    点击打开: jquery系列教程1-选择器全解 jquery系列教程2-style样式操作全解 jquery系列教程3-DOM操作全解 jquery系列教程4-事件操作全解 jquery系列教程5-动 ...

  10. 为db2用户添加db2命令及jdk环境变量配置

    AIX系统:db2inst用户 在/home/db2inst/.profile文件下新增以下代码(包括用户环境变量配置,具体路径取决于jdk安装的路径) PATH=/usr/bin:/etc:/usr ...