codeforces 682D(DP)
来源:互联网 发布:app数据查询 编辑:程序博客网 时间:2024/05/29 13:40
题目链接:http://codeforces.com/contest/682/problem/D
思路:dp[i][j][l][0]表示a串前i和b串前j利用a[i] == b[j]所得到的最长子序列,
dp[i][j][l][1]表示a串前i和b串前j不利用a[i] == b[j]所得到的最长子序列,
所以,dp[i][j][l][0] = max(dp[i-1][j-1][l][0] ,max(dp[i-1][j-1][l-1][0],dp[i-1][j-1][l-1][1])) + 1
↑ ↑
延续当前子串 新建子串
dp[i][j][l][1] = max(max(dp[i-1][j][l][0] ,dp[i-1][j][l][1]),max(dp[i][j-1][l][0] ,dp[i][j-1][l][1]))
#include<bits/stdc++.h>using namespace std;typedef long long ll;const int N = 1e3 + 3;char a[N],b[N];int n,m,k;int dp[N][N][11][2];int main(){ scanf("%d %d %d",&n,&m,&k); scanf("%s %s",a+1,b+1); for(int i = 1 ;i <= n ;i++) { for(int j = 1 ;j <= m ;j++) { for(int l = 1 ;l <= k ;l++) { if(a[i] == b[j]) dp[i][j][l][0] = max(dp[i-1][j-1][l][0] ,max(dp[i-1][j-1][l-1][0],dp[i-1][j-1][l-1][1])) + 1; dp[i][j][l][1] = max(max(dp[i-1][j][l][0] ,dp[i-1][j][l][1]),max(dp[i][j-1][l][0] ,dp[i][j-1][l][1])); } } } printf("%d\n",max(dp[n][m][k][0] ,dp[n][m][k][1])); return 0;}
0 0
- codeforces 682D(DP)
- CodeForces 10D(DP)
- Codeforces-Goodbye2016-D(DP)
- Codeforces 682D Alyona and Strings【dp】
- Codeforces 682D Alyona and Strings DP
- codeforces 580D(状态dp)
- CodeForces 383D Antimatter(DP)
- CodeForces 4D Mysterious Present(DP)
- Codeforces 474 D Flowers(DP)
- CodeForces 608D Zuma(DP)
- CodeForces 101D Castle(树形dp)
- CodeForces 484 D.Kindergarten(dp)
- Codeforces-837D Round Subset(dp)
- codeforces 183d(期望概率dp)
- Codeforces-837D:Round Subset(DP)
- 【DP】CodeForces 148D
- Codeforces 221D(dp)
- Codeforces 572D,DP
- 多线程中的基本概念
- 模拟 优先队列(hdu 5437)
- 146. LRU Cache[hard]
- 普通素数筛法
- 3.3 垃圾收集算法
- codeforces 682D(DP)
- Phpstorm配置git版本控制器
- Java后台学习之---cookie和session学习
- linux定时任务crontab自动备份mysql数据库(ssh/php)
- Struts2.0学习---第一个程序
- android开发实用工具
- LightOJ1285->极角排序
- 洛谷 P1024 [NOIP2001 T1] 一元三次方程求解
- 3.4 HotSpot算法实现