HDOJ 4628 - Pieces 状态压缩DP..枚举所有子集进行更新
来源:互联网 发布:oanda 数据接口 编辑:程序博客网 时间:2024/06/08 07:54
开始题目看错了....以为是连着的回文才能一次消掉..题目的意思是分开的也行...
串最长16..很容易想到状态压缩DP....当本状态回文时..直接为1...否则是其两个相对其互补的子集并的最小值...更新的时候要枚举其所有的子集...
比如说二进制状态t..要枚举其所有的子集..for(int i=t;i;i=(i-1)&t)
Program:
#include<iostream>#include<stdio.h>#include<string.h>#include<cmath>#include<queue>#include<stack>#include<set>#include<algorithm>#define ll long long#define oo 1000000007#define pi acos(-1.0)#define MAXN 16using namespace std; char s[MAXN];int dp[1<<MAXN],n;bool IsPalindrome(int x){ char ss[MAXN]; int i,j,m; m=0; for (i=0;i<n;i++) if (x & (1<<i)) ss[m++]=s[i]; i=0,j=m-1; while (i<=j && ss[i]==ss[j]) i++,j--; if (i>j) return true; return false;}int main(){ int T; scanf("%d",&T); while (T--) { scanf("%s",s); n=strlen(s); dp[0]=0; for (int t=1;t<(1<<n);t++) { dp[t]=oo; if (IsPalindrome(t)) dp[t]=1; for(int i=t;i;i=(i-1)&t) //枚举t的所有子集 dp[t]=min(dp[t],dp[i]+dp[t^i]); } printf("%d\n",dp[(1<<n)-1]); } return 0;}
- HDOJ 4628 - Pieces 状态压缩DP..枚举所有子集进行更新
- hdu 4628 Pieces (状态压缩+二进制枚举+dp)
- hdu - 4628 - Pieces(状态压缩dp)
- HDU 4628 Pieces(状态压缩dp)
- hdu 4628 Pieces (状态压缩dp)
- hdu 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces 状态压缩DP
- HDU 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces (状态压缩dp)
- UVA 11825 - Hackers' Crackdown 状态压缩 dp 枚举子集
- UVA 1252-Twenty Questions(状态压缩DP+子集枚举)
- hdu 4628 - Pieces(压缩dp)
- UVa 1508 - Equipment (状态压缩 + 枚举子集)
- UVA 11825Hackers' Crackdown dp+位运算状态压缩(子集枚举)
- poj 2836 子集 状态压缩dp
- 2013多校第三场 --Pieces--状态压缩DP
- hoj 2662 Pieces Assignment 状态压缩dp入门
- HOJ 2662 Pieces Assignment(状态压缩DP)
- hdu 4640 Island and study-sister(压缩DP+最短路,5级)
- Cloud Foundry中 JasperReports service集成
- linux主机改名以及oracle启动问题
- 解决学生信息管理系统之List列表中重复添加相同数据问题。
- u-boot串口初始化全过程
- HDOJ 4628 - Pieces 状态压缩DP..枚举所有子集进行更新
- 容斥原理应用(求1~r中有多少个数与n互素)
- mysql pod 插入 乱码的解决方案
- 排序算法(个人总结)
- 05-php中的全局变量和静态变量
- hdu 4635 Strongly connected (tarjan强连通分量)
- hdu 2895 (水)
- C语言文件输入/输出 ACM改进版(用freopen函数方便检验)
- 浅析.NET