1.小技巧

枚举集合S的子集:for(int i = S; i > 0; i=(i-1)&S)

枚举包含S的集合:for(int i = S; i < (1<<n); i = (i+1)|S)

2.训练题目

1.HDU 4628 Pieces http://acm.hdu.edu.cn/showproblem.php?pid=4628

题意: 给定一个(len<=16)的串,每次可删除一个回文子序列,问最少需要几次删完整个串

思路:简单状态压缩   dp[s]=min(dp[s],dp[s^sub]+1)  (sub为s的回文子序列)

# include<map>
# include<set>
# include<cmath>
# include<queue>
# include<stack>
# include<vector>
# include<string>
# include<cstdio>
# include<cstring>
# include<iostream>
# include<algorithm>
# include<functional>
using namespace std; typedef pair<int,int> PII;
# define lson l,m,rt<<
# define rson m+,r,rt<<|
# define MOD
# define LL long long
# define pb push_back
# define F first
# define S second
# define N
# define M
char s[N];
int len;
int flag[M],dp[M]; int check(int mask)
{
int i,n;
string sub="";
for(i=;i<len;i++)
if(mask&(<<i))
sub+=s[i];
n=sub.length();
for(i=;i<n/;i++)
if(sub[i]!=sub[n--i])
return ;
return ;
} int dfs(int mask)
{
int i,ans=<<;
if(!mask) return ;
if(dp[mask]!=-) return dp[mask];
for(i=mask;i>;i=(i-)&mask) //枚举mask的所有子集
if(flag[i])
ans=min(ans,dfs(mask^i));
return dp[mask]=ans+;
} int main()
{
//freopen("in.txt","r",stdin);
int i,T,ans;
scanf("%d",&T);
while(T--)
{
scanf("%s",s);
len=strlen(s);
memset(dp,-,sizeof(dp));
memset(flag,,sizeof(flag)); //是否为回文
for(i=;i<(<<len);i++)
flag[i]=check(i);
ans=dfs((<<len)-);
printf("%d\n",ans);
}
return ;
}

HDU 4628

[动态规划]状态压缩DP小结的更多相关文章

  1. 状态压缩dp小结

    最近一段时间算是学了一些状态压缩的题目,在这里做个小结吧 首先是炮兵布阵类题目,这类题目一开始给定一个矩形,要求在上面放置炮兵,如果在一格放了炮兵那么周围的某些格子就不能放炮兵,求最大能放置炮兵的数量 ...

  2. 3.4 熟练掌握动态规划——状态压缩DP

    从旅行商问题说起—— 给定一个图,n个节点(n<=15),求从a节点出发,经历每个节点仅一次,最后回到a,需要的最短时间. 分析: 设定状态S代表当前已经走过的城市的集合,显然,S<=(1 ...

  3. [知识点]状态压缩DP

    // 此博文为迁移而来,写于2015年7月15日,不代表本人现在的观点与看法.原始地址:http://blog.sina.com.cn/s/blog_6022c4720102w6jf.html 1.前 ...

  4. Vijos 1002 过河 状态压缩DP

    描述 在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧.在桥上有一些石子,青蛙很讨厌踩在这些石子上.由于桥的长度和青蛙一次跳过的距离都是正整数,我们可以把独木桥上青蛙可能到达的点看成数轴上 ...

  5. 状态压缩·一(状态压缩DP)

    描述 小Hi和小Ho在兑换到了喜欢的奖品之后,便继续起了他们的美国之行,思来想去,他们决定乘坐火车前往下一座城市——那座城市即将举行美食节! 但是不幸的是,小Hi和小Ho并没有能够买到很好的火车票—— ...

  6. [转]状态压缩dp(状压dp)

    状态压缩动态规划(简称状压dp)是另一类非常典型的动态规划,通常使用在NP问题的小规模求解中,虽然是指数级别的复杂度,但速度比搜索快,其思想非常值得借鉴. 为了更好的理解状压dp,首先介绍位运算相关的 ...

  7. 旅行商问题——状态压缩DP

    问题简介 有n个城市,每个城市间均有道路,一个推销员要从某个城市出发,到其余的n-1个城市一次且仅且一次,然后回到再回到出发点.问销售员应如何经过这些城市是他所走的路线最短? 用图论的语言描述就是:给 ...

  8. 状态压缩dp初学__$Corn Fields$

    明天计划上是要刷状压,但是作为现在还不会状压的\(ruoruo\)来说是一件非常苦逼的事情,所以提前学了一下状压\(dp\). 鸣谢\(hmq\ juju\)的友情帮助 状态压缩动态规划 本博文的大体 ...

  9. 浅谈状态压缩DP

    浅谈状态压缩DP 本篇随笔简单讲解一下信息学奥林匹克竞赛中的状态压缩动态规划相关知识点.在算法竞赛中,状压\(DP\)是非常常见的动规类型.不仅如此,不仅是状压\(DP\),状压还是很多其他题目的处理 ...

随机推荐

  1. MATLAB实现矩阵分块相乘

    要实现一下功能,这里$\bf{x}_i$为行向量 $${\bf{A}} = \left[ \begin{array}{l}{{\bf{x}}_1}\\{{\bf{x}}_2}\end{array} \ ...

  2. mustache模板技术

    一.简介Web 模板引擎是为了使用户界面与业务数据(内容)分离而产生的,它可以生成特定格式的文档,通常是标准的 HTML 文档.当然不同的开发语言有不同模板引擎,如 Javascript 下的 Hog ...

  3. das,nas,san区别——大型数据中心会用NAS+SAN软硬结合思路

    DAS(Direct Access Storage-直接连接存储)是指将存储设备通过SCSI接口或光纤通道直接连接到一台计算机上.NAS(Network Attached Storage网络连接存储) ...

  4. 452. Minimum Number of Arrows to Burst Balloons——排序+贪心算法

    There are a number of spherical balloons spread in two-dimensional space. For each balloon, provided ...

  5. java网络编程serversocket

    转载:http://www.blogjava.net/landon/archive/2013/07/24/401911.html Java网络编程精解笔记3:ServerSocket详解ServerS ...

  6. PHP分页类库

    <?php /** * @title: Ekcms page分页类库 * @version: 1.0 * @author: perry <perry@1kyou.com> * @pu ...

  7. ASP.NET MVC统一异常处理

    前言: 今早看了篇文章:求知成瘾,却无作品 的思考:很有感触,发现原来自己也是这样,对每样东西都抱有很大的兴趣或者希望自己去学,一年后发现原来自己什么都是皮毛什么都不精!最终发现真正的大牛都是在某一个 ...

  8. regsvr32 注册.dll的用法

    Regsvr 32命令是Windows中控件文件(如扩展名为DLL.OCX.CPL的文件)的注册和反注册工具. 命令格式 Regsvr32 [/s] [/n] [/i[:cmdline]] dllna ...

  9. DQL查询语句内容整理

    select * from t_hq_ryxx; select bianh,xingm from t_hq_ryxx; --为字段名定义别名 select bianh as 编号,xingm as 姓 ...

  10. 解决:操作无法完成(错误0x00000709)。再次检查打印机名称,并确保打印机已连接到.

    就是重启一下服务器端的Print Spooler服务就行了,这么简单! [控制面板 -  服务 -  Print Spooler]