HDU 3091 - Necklace - [状压DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3091
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others)
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.
necklace could be.
题意:
给你N个珠子,这些珠子编号为1~N,然后给出可以连在一起的两个珠子的编号,求把他们全部串起来有多少种方案。
样例有两种项链穿法:
①:“1-2-3-1”(包含“2-3-1-2”,“3-1-2-3”这两种情况);
②:“1-3-2-1”(包含“3-2-1-3”,“2-1-3-2”这两种情况);
可以看出,珠子串出的项链呈环状,但是珠子有规定好的逆时针或者顺时针的顺序,不能翻面;
题解:
设 i 表示状态:i转化为二进制数后,第k位(从右往左数)为0,表示k号珠子还没穿上去;为1,就代表已经穿上去了;
设 j 代表当前状态下,最后一个穿上去的是j号珠子;
设dp[i][j]表示在(i,j)状态下的方案数;
AC代码:
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
int n,m;
bool link[][];
ll dp[<<][],ans;
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
memset(link,,sizeof(link));
memset(dp,,sizeof(dp));
for(int i=,u,v;i<=m;i++)
{
scanf("%d%d",&u,&v);
link[v][u]=link[u][v]=;
} int ed_state=(<<n)-;
dp[][]=;
for(int state=;state<=ed_state;state++)
{
for(int i=;i<=n;i++)
{
if( (state&(<<(i-)))== || dp[state][i]== ) continue;
for(int j=;j<=n;j++)
{
if(!link[i][j]) continue;//这两颗珠子不能连在一起,跳过
if( state & (<<(j-)) ) continue;//这颗珠子已经在项链上,跳过
int next_state=state|(<<(j-));
dp[next_state][j]+=dp[state][i];
//printf("dp[%d][%d]=%I64d\n",next_state,next_bead,dp[next_state][next_bead]);
}
}
} ans=;
for(int i=;i<=n;i++) if(link[i][]) ans+=dp[ed_state][i];
printf("%I64d\n",ans);
}
}
HDU 3091 - Necklace - [状压DP]的更多相关文章
- HDU 4284Travel(状压DP)
HDU 4284 Travel 有N个城市,M条边和H个这个人(PP)必须要去的城市,在每个城市里他都必须要“打工”,打工需要花费Di,可以挣到Ci,每条边有一个花费,现在求PP可不可以从起点1 ...
- HDU 4336 容斥原理 || 状压DP
状压DP :F(S)=Sum*F(S)+p(x1)*F(S^(1<<x1))+p(x2)*F(S^(1<<x2))...+1; F(S)表示取状态为S的牌的期望次数,Sum表示 ...
- HDU 3001 Travelling ——状压DP
[题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...
- HDU - 5117 Fluorescent(状压dp+思维)
原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...
- hdu 4114(状压dp)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4114 思路:首先是floyd预处理出任意两点之间的最短距离.dp[state1][state2][u] ...
- HDU 3811 Permutation 状压dp
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3811 Permutation Time Limit: 6000/3000 MS (Java/Othe ...
- hdu 3091 Necklace 状态压缩dp *******
Necklace Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 327680/327680 K (Java/Others)Total ...
- HDU 5838 (状压DP+容斥)
Problem Mountain 题目大意 给定一张n*m的地图,由 . 和 X 组成.要求给每个点一个1~n*m的数字(每个点不同),使得编号为X的点小于其周围的点,编号为.的点至少大于一个其周围的 ...
- hdu 4628 Pieces 状压dp
题目链接 枚举所有状态, 1表示这个字符还在原来的串中, 0表示已经取出来了. 代码中j = (j+1)|i的用处是枚举所有包含i状态的状态. #include <iostream> #i ...
随机推荐
- 1、一、Introduction(入门): 0、Introduction to Android(引进到Android)
一.Introduction(入门) 0.Introduction to Android(引进到Android) Android provides a rich application framewo ...
- The confusion about jsp four scopes and ServletContext,HttpSession,HttpServletReqest,PageContext
The jsp four scopes are same with ServletContext,HttpSession,HttpServletRequest,PageContext? How ser ...
- 如何使用Web Service新建和更新Wiki页面的内容
公司内部有很多部门都创建了Wiki库,来做知识共享.公司是Hosting的SharePoint环境,不能写服务器端代码,要操作Wiki只能通过Web Service来完成,所以,碰到两个情况: 1)W ...
- [Maven]Maven中的一些基本概念
Pom文件中的groupId.artifactId.version和name,这三个元素定义了一个项目的基本的坐标,在Maven世界中,任何的jar.pom或者war都是基于这些基本的坐标惊醒区分. ...
- SpringBoot(一)-- 知识点介绍
一.简介 Spring Boot是为了简化Spring应用的创建.运行.调试.部署等而出现的,使用它可以做到专注于Spring应用的开发,而无需过多关注XML的配置.简单来说,它提供了一堆依赖打包,并 ...
- [SublimeText] 之 Packages
概述 Packages 是指供 Sublime Text 使用的资源文件集合,例如插件.语法高亮.菜单.片断等等.Sublime Text 自身安装了一些 Packages,还有很多用户创建的 Pac ...
- Mac下安装和卸载MySQL(含配置)
安装 首先需要下载 MySQL Community Server 下载地址:https://dev.mysql.com/downloads/mysql/ 进入MySQL的下载界面(https://d ...
- 中间件系列三 RabbitMQ之交换机的四种类型和属性
概述本文介绍RabbitMQ中交换机类型和属性,主要内容如下: 交换机的作用交换机的类型:Direct exchange(直连交换机).Fanout exchange(扇型交换机).Topic exc ...
- Python学习(25):Python执行环境
转自 http://www.cnblogs.com/BeginMan/p/3191856.html 一.python特定的执行环境 在当前脚本继续进行 创建和管理子进程 执行外部命令或程序 执行需要输 ...
- 【错误整理】ora-00054:resource busy and acquire with nowait specified解决方法【转】
当某个数据库用户在数据库中插入.更新.删除一个表的数据,或者增加一个表的主键时或者表的索引时,常常会出现ora-00054:resource busy and acquire with nowait ...