题目链接

枚举所有状态, 1表示这个字符还在原来的串中, 0表示已经取出来了。

代码中j = (j+1)|i的用处是枚举所有包含i状态的状态。

  1. #include <iostream>
  2. #include <vector>
  3. #include <cstdio>
  4. #include <cstring>
  5. #include <algorithm>
  6. #include <cmath>
  7. #include <map>
  8. #include <set>
  9. #include <string>
  10. #include <queue>
  11. #include <stack>
  12. #include <bitset>
  13. using namespace std;
  14. #define pb(x) push_back(x)
  15. #define ll long long
  16. #define mk(x, y) make_pair(x, y)
  17. #define lson l, m, rt<<1
  18. #define mem(a) memset(a, 0, sizeof(a))
  19. #define rson m+1, r, rt<<1|1
  20. #define mem1(a) memset(a, -1, sizeof(a))
  21. #define mem2(a) memset(a, 0x3f, sizeof(a))
  22. #define rep(i, n, a) for(int i = a; i<n; i++)
  23. #define fi first
  24. #define se second
  25. typedef pair<int, int> pll;
  26. const double PI = acos(-1.0);
  27. const double eps = 1e-;
  28. const int mod = 1e9+;
  29. const int inf = ;
  30. const int dir[][] = { {-, }, {, }, {, -}, {, } };
  31. int mark[<<], len, dp[<<];
  32. string s;
  33. int check(int x) {
  34. if(!x)
  35. return ;
  36. int i = , j = len-;
  37. while(i<j) {
  38. while(((<<i)&x)==)
  39. i++;
  40. while(((<<j)&x)==)
  41. j--;
  42. if(s[i]!=s[j])
  43. return ;
  44. i++, j--;
  45. }
  46. return ;
  47. }
  48. int main()
  49. {
  50. int n;
  51. cin>>n;
  52. while(n--) {
  53. cin>>s;
  54. len = s.size();
  55. int sta = <<len;
  56. for(int i = ; i<sta; i++) {
  57. mark[i] = check(i);
  58. }
  59. mem2(dp);
  60. dp[sta-] = ;
  61. for(int i = sta-; i>=; i--) {
  62. for(int j = i; j<sta; j = (j+)|i) {
  63. if(!mark[i^j])
  64. continue;
  65. if(dp[i]>dp[j]+)
  66. dp[i] = dp[j]+;
  67. }
  68. }
  69. printf("%d\n", dp[]);
  70. }
  71. return ;
  72. }

hdu 4628 Pieces 状压dp的更多相关文章

  1. HDU 4284Travel(状压DP)

    HDU 4284    Travel 有N个城市,M条边和H个这个人(PP)必须要去的城市,在每个城市里他都必须要“打工”,打工需要花费Di,可以挣到Ci,每条边有一个花费,现在求PP可不可以从起点1 ...

  2. HDU 4336 容斥原理 || 状压DP

    状压DP :F(S)=Sum*F(S)+p(x1)*F(S^(1<<x1))+p(x2)*F(S^(1<<x2))...+1; F(S)表示取状态为S的牌的期望次数,Sum表示 ...

  3. HDU 3001 Travelling ——状压DP

    [题目分析] 赤裸裸的状压DP. 每个点可以经过两次,问经过所有点的最短路径. 然后写了一发四进制(真是好写) 然后就MLE了. 懒得写hash了. 改成三进制,顺利A掉,时间垫底. [代码] #in ...

  4. HDU - 5117 Fluorescent(状压dp+思维)

    原题链接 题意 有N个灯和M个开关,每个开关控制着一些灯,如果按下某个开关,就会让对应的灯切换状态:问在每个开关按下与否的一共2^m情况下,每种状态下亮灯的个数的立方的和. 思路1.首先注意到N< ...

  5. hdu 4114(状压dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4114 思路:首先是floyd预处理出任意两点之间的最短距离.dp[state1][state2][u] ...

  6. HDU 3091 - Necklace - [状压DP]

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3091 Time Limit: 2000/1000 MS (Java/Others) Memory Li ...

  7. HDU 3811 Permutation 状压dp

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3811 Permutation Time Limit: 6000/3000 MS (Java/Othe ...

  8. hdu 4628 Pieces 状态压缩dp

    Pieces Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total S ...

  9. HDU 5838 (状压DP+容斥)

    Problem Mountain 题目大意 给定一张n*m的地图,由 . 和 X 组成.要求给每个点一个1~n*m的数字(每个点不同),使得编号为X的点小于其周围的点,编号为.的点至少大于一个其周围的 ...

随机推荐

  1. JAVA G1收集器 第11节

    JAVA G1收集器 第11节 上两章我们讲了新生代和年老代的收集器,那么这一章的话我们就要讲一个收集范围涵盖整个堆的收集器——G1收集器. 先讲讲G1收集器的特点,他也是个多线程的收集器,能够充分利 ...

  2. DooDigestAuth php(后台)授权管理类 web浏览器授权

    <?php /** * DooDigestAuth class file. * * @author Leng Sheng Hong <darkredz@gmail.com> * @l ...

  3. 不要伤害指针(1)--运算符&和*

    原文转载地址:http://blog.csdn.net/sunchaoenter/article/details/6646001 增加自己的想法,作为笔记. 这里&是取地址运算符,*是间接运算 ...

  4. leetcode Remove Duplicates from Sorted Array python

    class Solution(object): def removeDuplicates(self,nums): if len(nums) <= 0: return 0 j=0 for i in ...

  5. 基于nginx+lua简单的灰度发布系统

    upstream.conf upstream grey_1 { keepalive 1000; server localhost:8020; } upstream grey_2 { keepalive ...

  6. Linux学习之awk命令

    一. AWK 说明    awk是一种编程语言,用于在linux/unix下对文本和数据进行处理.数据可以来自标准输入.一个或多个文件,或其它命令的输出.它支持用户自定义函数和动态正则表达式等先进功能 ...

  7. CentOS yum安装配置lnmp服务器(Nginx+PHP+MySQL)

    1.配置防火墙,开启80端口.3306端口 vi /etc/sysconfig/iptables-A INPUT -m state --state NEW -m tcp -p tcp --dport  ...

  8. Android Fragment StartActivityForresult调用实例

    fragment里面的onActivityResult 怎样才能被调用,很简单,就一句话, startActivityForResult(intent, getActivity().RESULT_FI ...

  9. jQuery获取Select选择的Text和Value(详细汇总)

    语法解释: 1. $("#select_id").change(function(){//code...}); //为Select添加事件,当选择其中一项时触发 2. var ch ...

  10. Scala单例对象、伴生对象实战详解

    1.Scala单例对象 Scala单例对象是十分重要的,没有像在Java一样,有静态类.静态成员.静态方法,但是Scala提供了object对象,这个object对象类似于Java的静态类,它的成员. ...