Codeforces 682D Alyona and Strings【dp】
来源:互联网 发布:阿里云网站备案 编辑:程序博客网 时间:2024/05/29 16:44
给你一个长度为n和一个长度为m的字符串,让你将第一个字符串分成k段,使其按照相对位子和第二个字符串匹配的长度最大。
问这个最大长度。
思路:
考虑dp,设定dp【i】【j】【k】【2】:
dp【i】【j】【k】【0】表示第一个字符串位子到i,第二个字符串位子到j.已经分配完了k段,并且当前最后一个字符不希望延展的最大长度。
dp【i】【j】【k】【1】表示第一个字符串位子到i,第二个字符串位子到j.已经分配完了k段,并且当前最后一个字符希望延展的最大长度。
那么有:
if(a【i】==b【j】)
dp【i】【j】【k】【1】=max(dp【i-1】【j-1】【k-1】【0】+1,dp【i-1】【j-1】【k-1】【1】);从不希望延展的结尾处从新开辟一段子序列。
dp【i】【j】【k】【1】=max(dp【i-1】【j-1】【k】【1】+1,dp【i-1】【j-1】【k-1】【1】);从希望延展的结尾处继续延展。
无论a【i】是否和b【j】相等都有:
dp【i】【j】【k】【0】=max(dp【i-1】【j-1】【k】【0】,dp【i】【j】【k】【0】);
dp【i】【j】【k】【0】=max(dp【i-1】【j】【k】【0】,dp【i】【j】【k】【0】);
dp【i】【j】【k】【0】=max(dp【i】【j-1】【k】【0】,dp【i】【j】【k】【0】);
dp【i】【j】【k】【0】=max(dp【i】【j】【k】【1】,dp【i】【j】【k】【0】);
Ac代码:
#include<stdio.h>#include<string.h>#include<iostream>using namespace std;char a[1500];char b[1500];int dp[1005][1005][12][2];int main(){ int n,m,kk; while(~scanf("%d%d%d",&n,&m,&kk)) { memset(dp,0,sizeof(dp)); scanf("%s",a+1); scanf("%s",b+1); for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { for(int k=1;k<=kk;k++) { if(a[i]==b[j]) { dp[i][j][k][1]=max(dp[i-1][j-1][k-1][0]+1,dp[i][j][k][1]); dp[i][j][k][1]=max(dp[i-1][j-1][k][1]+1,dp[i][j][k][1]); } dp[i][j][k][0]=max(dp[i][j][k][1],dp[i][j][k][0]); dp[i][j][k][0]=max(dp[i][j-1][k][0],dp[i][j][k][0]); dp[i][j][k][0]=max(dp[i-1][j-1][k][0],dp[i][j][k][0]); dp[i][j][k][0]=max(dp[i-1][j][k][0],dp[i][j][k][0]); } } } printf("%d\n",max(dp[n][m][kk][0],dp[n][m][kk][1])); }}
0 0
- Codeforces 682D Alyona and Strings【dp】
- Codeforces 682D Alyona and Strings DP
- codeforces 682 D. Alyona and Strings
- Codeforces 682D Alyona and Strings
- 【31.58%】【codeforces 682D】Alyona and Strings
- codeforces 682D Alyona and Strings
- Codeforces Round #358D. Alyona and Strings【DP】
- codeforces 358D. Alyona and Strings (dp)
- Codeforces - 358D - Alyona and Strings(dp)
- Codeforces Round #358 (Div. 2) D. Alyona and Strings dp
- Codeforces Round #358 (Div. 2) D. Alyona and Strings dp
- Codeforces Round #358 (Div. 2) D. Alyona and Strings(字符串dp)
- Codeforces Round #358 (Div. 2) D Alyona and Strings(DP)
- Codeforces Round #358 (Div. 2) -- D. Alyona and Strings (DP)
- Codeforces Round #358 (Div. 2) D. Alyona and Strings(DP)
- Codeforces Round #358 (Div. 2) D. Alyona and Strings (DP)
- Codeforces Round #358 (Div. 2) D. Alyona and Strings
- Codeforces Round #358 (Div. 2)D. Alyona and Strings
- 系统吞吐量、TPS(QPS)、用户并发量、性能测试概念和公式
- 旅游规划(最短路,两重判断最优)
- 在Visual Studio中构建Node.js项目
- Java匿名内部类
- CentOS7 关闭防火墙
- Codeforces 682D Alyona and Strings【dp】
- 常见的七种Hadoop和Spark项目案例
- Android系统APP访问硬件之JNI方式0002
- Longest Palindromic Substring(字符串处理)
- 双目校正:杂谈
- android性能分析之Systrace的使用
- 开源项目OkHttpPlus——支持GET、POST、UI线程回调、JSON格式解析、链式调用、文件上传下载
- OC下的冒泡排序,直接插入排序,折半插入排序
- 12.kafka Producer Example