题目链接:HDU 5677 ztr loves substring

题意:有n个字符串,任选k个回文子串,问其长度之和能否等于L。

题解:用manacher算法求出所有回文子串的长度,并记录各长度回文子串的个数,再用背包思想判断是否有解。

dp[i][j]:选取i个回文子串,长度之和是否为j

其中用到二进制分解思想,将回文串长为i的数量cnt[i]拆成1+2+4+8+…形式,进行优化。

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define CLR(a,b) memset((a),(b),sizeof((a)))
const int N = ;
int dp[N][N], w[N*N*N], cnt[N], cnt1[N*N*N];
char s[N*];
void Manacher(char s[],int len) {
char Ma[N*];
int Mp[N*] , l = ;
CLR(Mp, );
Ma[l++] = '$'; Ma[l++] = '#';
for(int i = ; i < len; i++) {
Ma[l++] = s[i]; Ma[l++] = '#';
}
int mx = , id = ;
for(int i = ;i < l; i++) {
Mp[i] = mx > i ? min(Mp[*id-i], mx-i) : ;
while(Ma[i+Mp[i]] == Ma[i-Mp[i]]) Mp[i]++;
if(i + Mp[i] > mx) {
id = i;
mx = i + Mp[i];
}
if(Ma[i] == '#'&& Mp[i] == ) continue;
cnt[Mp[i]-]++;//记录该回文串长度数量
}
}
int main(){
int t, i, j, n, k, l, x, num;
scanf("%d", &t);
while(t--) {
scanf("%d%d%d", &n, &k, &l);
CLR(dp, ); CLR(cnt, );
for(i = ; i < n; ++i) {
scanf("%s", s);
int len = strlen(s);
Manacher(s, len);
}
num = ;
for(i = ; i <= ; ++i) {
for(j = ; j <= cnt[i]; cnt[i] -= j, j <<= ) {
w[num] = j * i;
cnt1[num++] = j;
}
if(cnt[i]) { w[num] = j * i; cnt1[num++] = j; }
}
dp[][] = ;
for(i = ; i < num; ++i)
for(j = l; j >= w[i]; --j)
for(x = cnt1[i]; x <= k; ++x)
dp[x][j] |= dp[x-cnt1[i]][j-w[i]];
if(dp[k][l]) puts("True");
else puts("False");
}
return ;
}

0ms

HDU 5677 ztr loves substring(Manacher+dp+二进制分解)的更多相关文章

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

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

  2. hdu 5677 ztr loves substring 多重背包

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...

  3. HDU 5677 ztr loves substring

    Manacher+二维费用多重背包 二进制优化 这题是一眼标算....先计算出每个长度的回文串有几种,然后用二维费用的多重背包判断是否有解. 多重背包做的时候需要二进制优化. #include< ...

  4. [HDU5677]ztr loves substring

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

  5. HDU 5675 ztr loves math (数学推导)

    ztr loves math 题目链接: http://acm.hust.edu.cn/vjudge/contest/123316#problem/A Description ztr loves re ...

  6. HDU 5676 ztr loves lucky numbers (模拟)

    ztr loves lucky numbers 题目链接: http://acm.hust.edu.cn/vjudge/contest/121332#problem/I Description ztr ...

  7. HDU 5675 ztr loves math

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

  8. hdu 5676 ztr loves lucky numbers(dfs+离线)

    Problem Description ztr loves lucky numbers. Everybody knows that positive integers are lucky if the ...

  9. hdu 5675 ztr loves math(数学技巧)

    Problem Description ztr loves research Math.One day,He thought about the "Lower Edition" o ...

随机推荐

  1. html中使用滚动条

    1. 在html页面中使用滚动条,效果如下: 代码如下: <div style="height:auto !important;max-height:200px;overflow:sc ...

  2. WebDriverWait介绍

    转自:https://www.cnblogs.com/ella-yao/p/7778678.html WebDriverWait介绍 package com.test.elementwait; imp ...

  3. 系统对象的使用——Cookie,ViewState,Session,Application

    Normal 0 7.8 磅 0 2 false false false EN-US ZH-CN X-NONE /* Style Definitions */ table.MsoNormalTable ...

  4. java gc 随记

    gc为garbage collection的缩写,中文翻译为垃圾回收.垃圾为不在使用的实例.变量,回收为释放垃圾所占用的内存空间. 学习过的C语言.C++语言,是没有垃圾回收机制的,因此需要软件工程师 ...

  5. PHP学习9——MySQL数据库

    主要内容: MySQL的启动 MySQL数据库操作 数据库表设计 创建和查看表 修改表结构 MySQL语句操作 数据库备份与恢复 PHP操作MySQL数据库 面向对象的数据库操作 MySQL数据库是目 ...

  6. java 并发(三)---Thread 线程

    Thread 的状态 线程共有五种状态.分别是: (1)新建 (2)就绪 (3)运行 (4)阻塞 (5)死亡 ,下面列列举的状态需要结合状态示意图更好理解.  新建状态(New): 新创建了一个线程对 ...

  7. efcore 配置链接sqlserver

    本文将在asp.net core api 项目中使用efcore corefirst模式 简单配置链接sqlserver数据库,以及简单的数据库迁移操作 一 新建项目 1. 首先我们先用vs2017 ...

  8. [android] post请求接口demo测试代码

    MainActivity.java package com.tsh.test; import java.io.InputStream; import java.io.OutputStream; imp ...

  9. Python中的一些特殊函数

    阅读目录 1. 过滤函数filter 2. 映射和归并函数map/reduce 3. 装饰器@(有参数和无参数) 4. 匿名函数lamda 回到顶部 1. 过滤函数filter 定义:filter 函 ...

  10. php explode时间分割

    <?php $str = "2017-02-27 13:40:42"; $first=explode(' ',$str); $second=explode('-', $fir ...