HDU3091 Necklace 【状压】
来源:互联网 发布:snmp trap协议端口号 编辑:程序博客网 时间:2024/06/15 20:56
题意:有许多珠子,能和别的相邻,求哈密顿回路的方案数
思路:n不大,考虑状压DP,dp[s][i],表示到s状态时,i在最后一个。从任意一个点开始,递推到s包含所有点,最后答案累加时,判断结尾和你选定的起点是否相连
#include<stdio.h>#include<iostream>#include<string.h>#include<string>#include<stdlib.h>#include<math.h>#include<vector>#include<list>#include<map>#include<stack>#include<queue>#include<algorithm>#include<numeric>#include<functional>using namespace std;typedef long long ll;const int maxn = 1<<20;ll dp[maxn][19];int dis[20][20];int main(void){int n,m,i,j;while(scanf("%d%d",&n,&m)!=EOF){memset(dis,0,sizeof dis);while(m--){int a,b;scanf("%d%d",&a,&b);dis[a][b] = dis[b][a] = 1;}memset(dp,0,sizeof dp);dp[1][1] = 1;int en = (1<<n)-1;for(int s = 1; s < en; s++){for(j = 1; j <= n; j++){if(!dp[s][j]) continue;for(i = 1; i <= n; i++) // new point{if(s&(1<<(i-1))) continue;if(!dis[i][j]) continue;dp[ s|(1<<(i-1)) ][i] += dp[s][j];}}}ll ans = 0;for(i = 1; i <= n; i++){if( dis[i][1] )ans += dp[en][i];}printf("%lld\n",ans);}return 0;}
阅读全文
0 0
- HDU3091 Necklace 【状压】
- hdu3091 Necklace
- 状压dp Necklace
- necklace
- hdu3091 状态压缩~方案数
- hdu3091之状态压缩dp
- HDU 5727 Necklace(玄学+状压DP 或 匈牙利)
- hdu 5727 Necklace 状压dp/二分图匹配
- Broken Necklace
- Broken Necklace
- Broken Necklace
- Broken Necklace
- Broken Necklace
- Broken Necklace
- J - Necklace
- hdu3489 Necklace
- broken necklace
- THUSC2011 necklace
- 学习Linux系统的几点建议
- (POJ
- Python爬虫入门:Urllib parse库使用详解(二)
- Android 之多种网络请求实现方式
- 神经机器翻译(Neural Machine Translation)系列教程
- HDU3091 Necklace 【状压】
- Anko
- 使用 Crossfilter 和 dc.js 构建交互式报表
- POJ 2528 Mayor's posters (线段树+离散化)
- JAVA企业面试题精选 Web基础 41-42
- HDU
- 机器学习:AI资源网址链接(大牛,研究机构,视频,博客,书籍,Quora......)
- 计算机的原码, 反码和补码
- 需要添加的依赖