题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5677

题意:给你N个串,问能否选出小于K个回文字符串使得选出的字符串的长度之和为L。

题解:很容易想到求一下回文字符串的个数和长度,然后就背包处理一下,数据比较水,用了manacher和二进制背包加速,0ms过。

 #include<cstdio>
#include<cstring>
#define min(a,b) (a)>(b)?(b):(a)
const int maxn = ;//字符串长度
char s[];
int bk[],t,n,k,l,val[],size[];
bool dp[][];
struct Manacher{
char str[maxn<<];
int p[maxn<<],len,mx,id,tl,ans,i;
void maxlen(char *s){
len=strlen(s),mx=,id=,tl=,str[tl++]='$',str[tl++]='#';
for(i=;i<len;i++)str[tl++]=s[i],str[tl++]='#';
for(i=,str[tl]=,ans=;i<tl;i++){
p[i]=mx>i?min(p[(id<<)-i],mx-i):;
while(str[i-p[i]]==str[i+p[i]])p[i]++;
if(i+p[i]>mx)mx=i+p[i],id=i;
if(str[i]=='#'&&p[i]==)continue;
bk[p[i]-]++;
}
}
}M;
void back(){
int cnt=;//将所有的回文串二进制拆解
for(int i=;i<=;i++){
int tmp=;
while(bk[i]>=tmp)
val[++cnt]=tmp*i,size[cnt]=tmp,bk[i]-=tmp,tmp*=;
if(bk[i])val[++cnt]=tmp*i,size[cnt]=tmp;
}
memset(dp,,sizeof(dp));
dp[][]=;
for(int i=;i<=cnt;i++){
for(int j=k;j>=size[i];j--)
for(int r=l;r>=val[i];r--)
if(dp[j-size[i]][r-val[i]])dp[j][r]=;
}
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d%d",&n,&k,&l);
memset(bk,,sizeof(bk));
for(int i=;i<=n;i++){scanf("%s",s);M.maxlen(s);}
back();
if(dp[k][l])puts("True");
else puts("False");
}
return ;
}

hdu_5677_ztr loves substring(回文+二维多重背包)的更多相关文章

  1. HDU 5677 ztr loves substring(回文串加多重背包)

    ztr loves substring Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Othe ...

  2. 51nod-1503 猪和回文 - 二维矩阵上的dp

    题目链接 一只猪走进了一个森林.很凑巧的是,这个森林的形状是长方形的,有n行,m列组成.我们把这个长方形的行从上到下标记为1到n,列从左到右标记为1到m.处于第r行第c列的格子用(r,c)表示. 刚开 ...

  3. [hdu2159]FATE二维多重背包(背包九讲练习)

    解题关键:二维约束条件,只需加一维状态即可. 转移方程:$f[j][k] = \max (f[j][k],f[j - w[i]][k - 1] + v[i])$ #include<bits/st ...

  4. LeetCode 5. Longest Palindromic Substring & 回文字符串

    Longest Palindromic Substring 回文这种简单的问题,在C里面印象很深啊.希望能一次过. 写的时候才想到有两种情况: 454(奇数位) 4554(偶数位) 第1次提交 cla ...

  5. HDU-2159FATE(二维完全背包)

    FATE Problem Description 最 近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完 ...

  6. hdu2159二维费用背包

    题目连接 背包九讲----二维费用背包 问题 二维费用的背包问题是指:对于每件物品,具有两种不同的费用:选择这件物品必须同时付出这两种代价:对于每种代价都有一个可付出的最大值(背包容量).问怎样选择物 ...

  7. HDU2159 二维完全背包

    FATE Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. hdu3496 二维01背包

    题目链接:http://acm.split.hdu.edu.cn/showproblem.php?pid=3496 //刚看题目以为是简单的二维01背包,but,,有WA点.. 思路:题中说,只能买M ...

  9. HDU2159:FATE(二维完全背包)

    Problem Description 最近xhd正在玩一款叫做FATE的游戏,为了得到极品装备,xhd在不停的杀怪做任务.久而久之xhd开始对杀怪产生的厌恶感,但又不得不通过杀怪来升完这最后一级.现 ...

随机推荐

  1. JAVA类与对象(课堂总结)

    一:"=="的不同含义 当"=="施加于原始数据类型变量时,是比较变量所保存的数据是否相等当"=="施加于引用类型变量时,是比较这两个变量是 ...

  2. Managed Switch: Confs

    shortcuts: c-w: delete word before c-a: move to first char c-y: delete everything after cursor c-z: ...

  3. Weex-进阶笔记一

    p.p1 { margin: 0.0px 0.0px 2.0px 0.0px; font: 14.0px Helvetica; color: #454545 } p.p2 { margin: 0.0p ...

  4. day23 框架之基础加强

    day23 框架之基础加强 今日任务 aptana(javascript的eclipse插件):http://www.cnblogs.com/terrylin/archive/2012/06/20/2 ...

  5. 计算机网络课程优秀备考PPT之第二章物理层(二)

    为了记录自己从2016.9~2017.1的<计算机网络>助教生涯,也为了及时梳理和整写笔记! 前期博客是, 计算机网络课程优秀备考PPT之第一章概述(一) 以上是<计算机网络> ...

  6. ValidationMessageFor验证

    一,在modle下的自己新建的PowerViewModel.cs下编辑错误显示 public class PowerViewModel    {        [Required( ErrorMess ...

  7. iOS-Runtime机制详解

    一.简介 runtime是一套底层的纯c语言的API,我们写的代码在程序运行过程中都会被转化成runtime的C代码执行,例如[target doSomething];会被转化成objc_msgSen ...

  8. nginx读取图片没有权限

    场景是这样的,我们项目中上传图片到linux服务器后,保存图片存储路径和网络访问路径.app中用数据库返回的 图片访问路径来访问图片(nginx通过nfs方式读取图片).但是访问不到.要手动 chmo ...

  9. Java 向SQL Server插入文件数据

    package sqlserver; import java.util.Date; import java.util.UUID; import java.text.SimpleDateFormat; ...

  10. MongoDB数据模型(三)

    六.数据模型引用 文档 我们已经知道MongoDB以文档的形式存储数据,而文档是JSON风格的数据结构,由一系列的“字段名-值”对组成,如下所示 { "item": "p ...