/*状态转移f[i]=min(f[i],f[j]+f[i^j]);
就是j状态+i^j状态=i状态,f[i]记录的是从i删除1要的最小步数*/
#include<string.h>
#include<stdio.h>
#include<algorithm>
using namespace std;
const int N=;
int f[N];
int n;
char s[];
int min(int a,int b)
{
if(a<b) return a;
return b;
}
int can(int x)//x代表的是从原来串中取得的子串,比如abcdef,如果x=111000,那么就是取abc,1代表取,0代表不取
{
int i,j;
int l=,r=n-;
while (l<=r)
{
/*两个while是将开头和结尾的每一对1取出来比较*/
while (l<n&&(x&(<<l))==) l++;//当遇到1或l>n时跳出
while (r>=&&(x&(<<r))==) r--;
if (s[l]!=s[r]) return ;//如果取出来的子串不满足回文就返回0
else
{
l++;r--;//继续取对1
}
}
return ;
}
int main()
{
int i,j;
int ca;
scanf("%d",&ca);
while (ca--)
{
scanf("%s",s);
n=strlen(s);
f[]=;//一个都不取
for (i=;i<(<<n);i++)//遍历所有状态,其实可以开个数组,记录一下满足的状态,那样可以省时间吗
{
if (can(i)) f[i]=;//满足回文就可以一步删除
else f[i]=;//不满足就置为一个大于n的数
}
for (i=;i<(<<n);i++)//遍历所有状态
for (j=(i-)&i;j;j=(j-)&i)//删除操作,j是i的下一个状态
f[i]=min(f[i],f[j]+f[i^j]);//i^j是在i中删除j剩下的状态,不如1001^1000=0001,0001就是删除1000剩下的
printf("%d\n",f[(<<n)-]);//结果就是删除n个1需要的最小步数,n个1代表n个都要取到
}
return ;
}

11:42:14

HDU4628的更多相关文章

  1. HDU4628+状态压缩DP

    /* 状态压缩DP dp[ i ]:达到i状态的最小step. 题意:每次可以去掉一个回文串,求最少几步能取完. */ #include<stdio.h> #include<stri ...

  2. HDU-4628 Pieces 搜索 | DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4628 数据不大,枚举本质.首先对枚举出回文串,然后用DP或者搜索,这里因为层数不多,用bfs比较好,或 ...

  3. HDU-4628 Pieces 如压力DP

    鉴于他的字符串,每一个都能够删除回文子串.子可以是不连续,因此,像更好的模拟压力.求删除整个字符串需要的步骤的最小数量. 最大长度为16,因此不能逐行枚举状态.首先预处理出来全部的的回文子串,然后从第 ...

  4. [hdu4628 Pieces]二进制子状态,DP

    题意:给一个长度为16的字符串,每次从里面删掉一个回文序列,求最少需要几次才能删掉所有字符 思路:二进制表示每个字符的状态,那么从1个状态到另一个状态有两种转移方式,一是枚举所有合法的回文子序列,判断 ...

随机推荐

  1. 2018 ACM-ICPC 北京赛区小结 @ Reconquista

    Statistics TYPE: Onsite Contest NAME: 2018 - ICPC Regional - Asia EC - Beijing PLAT: Hihocoder TIME: ...

  2. 【vijos】1781 同余方程(拓展欧几里得)

    https://vijos.org/p/1781 学习了下拓欧.. 求exgcd时,因为 a*x1+b*y1=a*x2+b*y2=b*x2+(a-b*[a/b])*y2 然后移项得 a*x1+b*y1 ...

  3. 【BZOJ】3297: [USACO2011 Open]forgot(dp)

    http://www.lydsy.com/JudgeOnline/problem.php?id=3297 这题拖了很久呢... 很久以前写了个dfs,,但是tle了..... 然后一直想dp想不出来, ...

  4. 拦截asp.net输出流并进行处理的方法

    本文实例主要实现对已经生成了HTML的页面做一些输出到客户端之前的处理. 方法的实现原理是:把Response的输出重定向到自定义的容器内,也就是我们的StringBuilder对象里,在HTML所有 ...

  5. hdu 4539(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4539 思路:跟poj1185简直就是如出一辙! #include<iostream> #i ...

  6. Java Something

    Java静态代码检查工具 FindBugs FindBugs is a defect detection tool for Java that uses static analysis to look ...

  7. 使用apt-get命令,出现“无法获得锁”的问题

    参考地址 http://blog.csdn.net/namecyf/article/details/7297168

  8. 报错An internal error occurred during: "reload maven project". java.lang.NullPointerException

    新建了一个maven项目,由于有问题就删除了,但是卡住了就强制关闭了. 查了一下是由于由于没有正常关机导致eclipse无法将数据正常写入配置文件导致无法启动.所以报这样一个异常. 最后是这样解决的: ...

  9. Python调用外部程序

    通过os.system和subprocess.call()函数调用其他程序 预备知识:cmd中打开和关闭程序 cmd中打开程序 a.打开系统自带程序 系统自带的程序的路径一般都已加入环境变量之中,只需 ...

  10. poj3683(2-SAT 求任意方案)

    基础的2-SAT求任意方案的题目. Priest John's Busiest Day Time Limit: 2000MS   Memory Limit: 65536K Total Submissi ...