HDU 5677 ztr loves substring(回文串加多重背包)
ztr loves substring
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)
Total Submission(s): 219 Accepted Submission(s): 119
for example string "yjqqaq"
this string contains plalindromes:"y","j","q","a","q","qq","qaq".
so we can choose "qq" and "qaq".
the number of test cases.
For each test case:
First line contains these positive integer N(1<=N<=100),K(1<=K<=100),L(L<=100).
The next N line,each line contains a string only contains lowercase.Guarantee even length of string won't more than L.
3 2 3 7 yjqqaq claris 2 2 7 popoqqq fwwf 1 3 3 aaa
False True True 由于字符串的长度只有100,所以我们可以用暴力求所有的回文子串,可以动态规划去求。 然后就可以用多重二维费用背包来处理,这里不需要用单调队列优化,不会超时,另外如果K>L直接是False #include <iostream> #include <string.h> #include <stdlib.h> #include <algorithm> #include <stdio.h> #include <math.h> using namespace std; int dp[105][105]; int bp[105][105]; int v[105]; int c[105]; char a[105]; int n,K,L; void OneZeroPack(int v,int w) { for(int i=K;i>=1;i--) { for(int j=L;j>=v;j--) { bp[i][j]=max(bp[i][j],bp[i-1][j-v]+w); } } } void CompletePack(int v,int w) { for(int i=1;i<=K;i++) { for(int j=v;j<=L;j++) { bp[i][j]=max(bp[i][j],bp[i-1][j-v]+w); } } } void MulitplyPack(int v,int w,int c) { if(c*w>=L) { CompletePack(v,w); return; } int k=1; while(k<c) { OneZeroPack(k*v,k*w); c-=k; k<<=1; } OneZeroPack(c*v,c*w); } int main() { int t; scanf("%d",&t); int m; while(t--) { scanf("%d%d%d",&n,&K,&L); m=0; memset(c,0,sizeof(c)); memset(v,0,sizeof(v)); v[0]=1; for(int i=1;i<=n;i++) { memset(dp,0,sizeof(dp)); for(int p=1;p<=100;p++) dp[p][p]=1; scanf("%s",a); int len=strlen(a); m=max(m,len); c[0]+=len; for(int l=1;l<=len-1;l++) { int num=0; for(int i=0;i+l<=len-1;i++) { int j=i+l; if(a[i]==a[j]&&(j-i==1||dp[i+1][j-1]==1)) { dp[i][j]=1; num++; } } v[l]=l+1; c[l]+=num; } } memset(bp,0,sizeof(bp)); for(int i=0;i<m;i++) { if(c[i]==0) continue; MulitplyPack(v[i],v[i],c[i]); } if(K>L) { printf("False\n"); continue; } if(bp[K][L]==L) printf("True\n"); else printf("False\n"); } return 0;}
HDU 5677 ztr loves substring(回文串加多重背包)的更多相关文章
- hdu_5677_ztr loves substring(回文+二维多重背包)
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5677 题意:给你N个串,问能否选出小于K个回文字符串使得选出的字符串的长度之和为L. 题解:很容易想到 ...
- HDU 5677 ztr loves substring(Manacher+dp+二进制分解)
题目链接:HDU 5677 ztr loves substring 题意:有n个字符串,任选k个回文子串,问其长度之和能否等于L. 题解:用manacher算法求出所有回文子串的长度,并记录各长度回文 ...
- HDU 5677 ztr loves substring
Manacher+二维费用多重背包 二进制优化 这题是一眼标算....先计算出每个长度的回文串有几种,然后用二维费用的多重背包判断是否有解. 多重背包做的时候需要二进制优化. #include< ...
- hdu 5677 ztr loves substring 多重背包
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submission( ...
- Girls' research - HDU 3294 (Manacher处理回文串)
题目大意:给以一个字符串,求出来这个字符串的最长回文串,不过这个字符串不是原串,而是转换过的,转换的原则就是先给一个字符 例如 'b' 意思就是字符把字符b转换成字符 a,那么c->b, d-& ...
- Harry and magic string HDU - 5157 记录不相交的回文串对数
题意: 记录不相交的回文串对数 题解: 正着反着都来一遍回文树 用sum1[i] 表示到 i 位置,出现的回文串个数的前缀和 sun2[i]表示反着的个数 ans+=sum1[i-1]*sum2[i] ...
- HDU5658:CA Loves Palindromic (回文树,求区间本质不同的回文串数)
CA loves strings, especially loves the palindrome strings. One day he gets a string, he wants to kno ...
- [LeetCode] Longest Palindromic Substring 最长回文串
Given a string S, find the longest palindromic substring in S. You may assume that the maximum lengt ...
- HDU 5651 计算回文串个数问题(有重复的全排列、乘法逆元、费马小定理)
原题: http://acm.hdu.edu.cn/showproblem.php?pid=5651 很容易看出来的是,如果一个字符串中,多于一个字母出现奇数次,则该字符串无法形成回文串,因为不能删减 ...
随机推荐
- JiaThis™“分享到”侧栏代码
风格:迷你: 猜你喜欢: 开启 使用说明: 复制并粘贴下面的JS代码,放到您的网页,可以在<body>和</body>的之间网页的任意位置放置.如果您的网站使用的模板, ...
- Rabbitmq消息队列(四) 发布订阅
1.简介 在上篇教程中,我们搭建了一个工作队列,每个任务只分发给一个工作者,在本篇教程中,我们要做的跟之前完全不一样 —— 分发一个消息给多个消费者(consumers).这种模式被称为“发布/订阅” ...
- object-c全局变量
跟c++一定,在.m里Obj*obj=NULL,在.h里extern Obj*obj 即可.
- AspNet GridView Excel 下载 Excel 导出
1.GridView AutoGenerateColums =false; DataSource DataBind 2.BoundField DataField HeaderText ItemStyl ...
- EF检索中文失败的解决办法
1. MYSQL: 保证所有的的列都是UTF8格式. 2. VS2010: 在data server建立连接时,选择advance,将chracterset设成utf8,这样在VS2010里查看和更改 ...
- (WPF)依赖属性
属性触发器: <Button MinWidth=" 75" Margin="10"> <Button.Style> <Style ...
- 记一次kafka客户端NOT_COORDINATOR_FOR_GROUP处理过程
转发请注明原创地址:https://www.cnblogs.com/dongxiao-yang/p/10602799.html 某日晚高峰忽然集群某个大流量业务收到lag报警,查看客户端日志发现reb ...
- Oracle之函数concat、lpad
一.引言 程序测试需要生成大量的测试数据,且测试数据有主键,主键自增,于是决定用存储过程来实现,经过半天的查资料终于完成了,记录之,学习之 二.存储过程 格式: CREATE PROCEDURE re ...
- QT .pro文件 LIBS用法详解
在程序中需要使用到团队其它成员开发的静态库和动态库,起初是知道使用LIBS变量在在.pro文件中指定需要包含的库,但是实际使用的时候却遇到很大麻烦,但其实确实是因为自己看官方文档不太用心造成的. 下面 ...
- HTML5七巧板canvas绘图(复习)
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <m ...