HDU 4628 状态压缩入门
来源:互联网 发布:ubuntu ttf字体安装 编辑:程序博客网 时间:2024/05/16 18:47
hdu 4628 http://acm.hdu.edu.cn/showproblem.php?pid=4628
简单状态压缩
题意: 给定一串字符串 , 每次可以消掉一串不连续回文串 ,问最少要消除多少次。
思路:先列举出所有是回文串的情况,再进行状态压缩计算。
#include<iostream>#include<string>#include<cstring>using namespace std;const int maxn = (1 << 16) + 5;const int inf = 1 << 30 ;int dp[maxn];bool is_pa[maxn];int main(){int T;while(scanf("%d",&T)!=EOF){//getchar();char str[1005];while(T--){memset(is_pa,0,sizeof(is_pa));scanf("%s",str);int n = strlen(str);int i,j;for(i=0;i< (1<<n);i++){int a = 0 ;int b = n-1;while(a<b){while( (i & (1<<a))==0 && a< n-1 ) a++;while( (i & (1<<b))==0 && b> 0 ) b--;if(str[a]!=str[b])break;a++;b--;}if(a<b)continue;is_pa[i]=true;} // 判断是否回文串。dp[(1<<n)-1]=0;for(i=0;i<=(1<<n)-2;i++)dp[i]=inf;for (i=(1<<n)-2;i>=0;i--) { for (j=i;j<(1<<n);j=((j+1)|i) ) { //j=(j+1)/i;可以使得i每一位为1的时候j的改位也为1if (is_pa[(~i) & j]) dp[i]=min(dp[j]+1,dp[i]); //(~i&j)可以得出两个串相差的部分。} } printf("%d\n",dp[0]); }}return 0;}
- HDU 4628 状态压缩入门
- hdu 4628(状态压缩)
- HDU 4628 状态压缩
- hdu 4628 状态压缩dp
- hdu 2167 状态压缩dp(入门题目)
- hdu - 4628 - Pieces(状态压缩dp)
- HDU 4628 Pieces(状态压缩dp)
- hdu 4628 Pieces (状态压缩dp)
- hdu 4628(状态压缩dp)
- hdu 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces 状态压缩DP
- HDU 4628 Pieces(状态压缩DP)
- hdu 4628 Pieces (状态压缩dp)
- 状态压缩DP 入门
- 状态压缩DP入门
- 状态压缩dp入门
- 状态压缩DP入门
- 状态压缩DP入门
- QT 编写 简单的计算器(新手上路篇)
- Linux硬链接和符号链接
- 解决WIN8输入法切换页面后变英文的问题
- RESTful 风格 小解
- cocos2d-xandroid 写makefile 技巧
- HDU 4628 状态压缩入门
- RedHat linux 不能以图形化方式安装程序
- 浙工ACM1096
- UVa 10128 Queue (DP)
- socket套接字简介
- 基于TCP/IP协议的Scoket JAVA编程
- 2013都快过去了
- hadoop常识指南
- 熬之滴水成石:最想深入了解的内容--windows内核机制(10)