【JZOJ 4595】 String
来源:互联网 发布:电视网络机顶盒多少钱 编辑:程序博客网 时间:2024/05/21 19:47
Description
有两种字符串A,B。长度分别为n,m。现在需要在S里面有序地选出k个子串,且在B中出现的顺序与这k个子串的顺序相同。问这k个子串最大的长度和。
吐槽:题意不清。
有序地的意思是子串从左到右选
选的各个子串不能重复、重叠
100% n,m<=1000 k<=10
Analysis
一眼DP
可是DP有技巧
设
枚举
Code
#include<cstdio>#include<algorithm>#define fo(i,a,b) for(int i=a;i<=b;i++)using namespace std;const int N=1010,K=12;int n,m,r,f[N][N][K][2];char a[N],b[N];int main(){ freopen("string.in","r",stdin); freopen("string.out","w",stdout); int ans=0; scanf("%d %d %d\n%s\n%s",&n,&m,&r,a+1,b+1); fo(k,1,r) { fo(i,1,n) { fo(j,1,m) { f[i][j][k][0]=max(f[i][j-1][k][0],f[i-1][j][k][0]); f[i][j][k][0]=max(f[i][j][k][0],f[i][j][k][1]); if(a[i]==b[j]) { f[i][j][k][1]=max(f[i][j][k][1],f[i-1][j-1][k-1][0]+1); f[i][j][k][1]=max(f[i][j][k][1],f[i-1][j-1][k][1]+1); f[i][j][k][0]=max(f[i][j][k][0],f[i][j][k][1]); } if(k==r) ans=max(ans,f[i][j][r][1]); } } } printf("%d",ans); return 0;}
0 0
- 【JZOJ 4595】 String
- 【JZOJ 4595】String
- 【JZOJ 4812】string
- JZOJ 4812 【NOIP2016提高A组五校联考2】string
- [jzoj 4812]【NOIP2016提高A组五校联考2】string
- 【JZOJ 4812】【NOIP2016提高组 五校联考2】string
- jzoj 4812. 【NOIP2016提高A组五校联考2】string 排列组合+乘法逆元
- [JZOJ 3424] 粉刷匠 && [JZOJ 4254] 集体照
- [JZOJ 1280]最大匹配
- [JZOJ 1281]旅行
- [1282 JZOJ]资源勘探
- [JZOJ 1283]排序统计
- JZOJ NOIP2014模拟 8.12
- JZOJ NOIP2014模拟 8.13
- [JZOJ 1598]文件修复
- 【JZOJ 3111】单词查找
- 【JZOJ 3112】开会
- JZOJ 3463 军训
- 最常用的Eclipse快捷键
- linux shell中怎样批量修改文件名为 文件夹_文件名
- Layer2-wan-pppoe
- uboot的relocation原理详细分析
- appveryor 自动分发
- 【JZOJ 4595】 String
- JAVA NIO使用非阻塞模式实现高并发服务器
- Buileder(生成器)—对象创建型模式
- oracle分析函数:三、first,first_value,lag,lead函数
- 日常记录(二)SpringMVC导出Excel
- 在批处理模式下使用mysql
- Android下屏幕适配
- BOM
- 位运算——Reverse Bits