/*状态转移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. 【BZOJ】1656:[Usaco2006 Jan]The Grove 树木(bfs+特殊的技巧)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1656 神bfs! 我们知道,我们要绕这个联通的树林一圈. 那么,我们想,怎么才能让我们的bfs绕一个 ...

  2. ChemDraw进行自动调整的步骤

    说到化学绘图软件那就不得不提ChemDraw,起非常的经典在国内外都得到了普遍应用,最新版是ChemDraw 15.1 Pro.在使用ChemDraw化学绘图工具绘制化学图形的时候,需要循序渐进一步一 ...

  3. Codeforces Round #364 (Div. 1)B. Connecting Universities

    题目链接:传送门 题目大意:n个点构成一棵树,给定 k*2 点,要分成 k 组,使每组点之间的距离之和最大. 题目思路:因为是求距离之和最大,所以我们可以知道这样一个性质.如果以一条边为界,两边的子树 ...

  4. 【BZOJ2836】魔法树 树链剖分

    [BZOJ2836]魔法树 Description Input Output Sample Input 4 0 1 1 2 2 3 4 Add 1 3 1 Query 0 Query 1 Query ...

  5. Docker的初体验

    这几天捣鼓了一下docker,是真的麻烦啊,网上资料比较杂乱,也很多英文,学起来挺多问题的 Docker下载 win10专业版:开启Hyper-V,下载并安装 docker-for-windows(但 ...

  6. [LintCode] 带重复元素的排列

    递归实现: class Solution { public: /** * @param nums: A list of integers. * @return: A list of unique pe ...

  7. 170122、Netty 长连接服务

    推送服务 还记得一年半前,做的一个项目需要用到 Android 推送服务.和 iOS 不同,Android 生态中没有统一的推送服务.Google 虽然有 Google Cloud Messaging ...

  8. session_id

    <?php //session_start(); //$sn = session_id(); $sn = 3; $url='w2.php?s='.$sn; echo $url; w 在客户端禁用 ...

  9. 2015-04-14——css3 @media

    //判断横竖屏 @media screen and (min-aspect-ratio: 13/13) { body {background-color:red;}}  //屏幕宽高比,必须是除数形式 ...

  10. Python知识点复习之__call__

    一个对象实例可以有自己的属性和方法,当我们调用实例方法时,我们用instance.method()来调用.能不能直接在实例本身上调用呢?在Python中,答案是肯定的. 任何类,只需要定义一个__ca ...