uva1625 Color Length
来源:互联网 发布:腾讯云服务器ubuntu 编辑:程序博客网 时间:2024/04/27 14:51
题意不说了
题解:(还是去网上搜了题解。。。)
定义dp[i][j]为第1个序列被取走了i个字符,第二个序列被取走了j个字符
定义c[i][j]为两个字符串分别被取走i,j个字符后还有多少已经开始但仍未结束的字符,这个是可以预处理出来的
而对于新序列来说,每增加一个字符,它的ans就会增加c
于是dp方程式就是:dp[i][j]=min(dp[i-1][j]+c[i-1][j],dp[i][j-1]+c[i][j-1])
实在是巧妙,表示膜拜,有兴趣可以直接去看原文:http://www.cnblogs.com/AOQNRMGYXLMV/p/4006498.html
代码的实现也是非常巧,还用了滚动数组优化空间:
code:
#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>const int MAXN=5005;const int inf=0x3f3f3f3f;using namespace std;char A[MAXN],B[MAXN];int sA[30],sB[30];//这里储存的是每个字符的开始位置int eA[30],eB[30];//这里储存的是每个字符的结束位置int dp[2][MAXN];int c[2][MAXN];int main(){ int T; scanf("%d",&T); while(T--) { scanf("%s%s",A+1,B+1); int lenA=strlen(A+1); int lenB=strlen(B+1); for(int i=1;i<=lenA;i++) A[i]-='A'; for(int i=1;i<=lenB;i++) B[i]-='A'; memset(sA,0x3f,sizeof sA); memset(sB,0x3f,sizeof sB); memset(eA,0,sizeof eA); memset(eB,0,sizeof eB);//之前因为这里没清Wa了 for(int i=1;i<=lenA;i++) { sA[A[i]]=min(sA[A[i]],i); eA[A[i]]=i; } for(int i=1;i<=lenB;i++) { sB[B[i]]=min(sB[B[i]],i); eB[B[i]]=i; } memset(dp,0,sizeof dp); memset(c,0,sizeof c); int t=0; for(int i=0;i<=lenA;i++) { for(int j=0;j<=lenB;j++) { if(!i&&!j) continue; int v1=inf,v2=inf; if(i) v1=dp[t^1][j]+c[t^1][j]; if(j) v2=dp[t][j-1]+c[t][j-1]; dp[t][j]=min(v1,v2);//这里先做dp再更新c的原因是计算字符串长度时,长度要-1 if(i) { c[t][j]=c[t^1][j]; if(sA[A[i]]==i&&sB[A[i]]>j) c[t][j]++; if(eA[A[i]]==i&&eB[A[i]]<=j) c[t][j]--; } else if(j)//这个else if可以保证c[0][j]只被更新一次,用dp的观点来看,相当于赋初值 { c[t][j]=c[t][j-1]; if(sB[B[j]]==j&&sA[B[j]]>i) c[t][j]++; if(eB[B[j]]==j&&eA[B[j]]<=i) c[t][j]--; } } t^=1; } printf("%d\n",dp[t^1][lenB]);//不是t的原因是循环结束时t^=1 }}
阅读全文
0 0
- UVA1625 - Color Length (DP)
- UVa1625 Color Length
- UVa1625 - Color Length
- uva1625 color length
- uva1625 Color Length
- UVa1625 Color Length
- uva1625 Color Length
- UVa1625--Color Length DP
- UVa1625 Color Length
- uva1625 Color Length
- 【动态规划】[UVa1625]Color Length
- UVa1625 Color Length(DP)
- Uva1625 -Color Length(DP)
- UVA1625 / UVALive 5841 Color Length DP
- uva1625 Color Length 线性动态规划
- 【DP模型:LCS】uva1625 Color Length
- UVA1625 Color Length(附 刘汝佳代码)
- UVa1625 Color length[DP][差分]
- 【每日一题-5】复杂链表的复制
- CentOS yum 源的配置与使用
- css的选择器
- 递归法求数组中的最大数
- Spring配置文件中的Bean之间的关系
- uva1625 Color Length
- 写一个函数,返回一个数组中所有元素被第一个元素相除的结果
- 八大排序算法
- XMind 2013 v3.5.1 官方免费版
- MyBatis学习总结一
- this.requestWindowFeature(Window.FEATURE_NO_TITLE)相关
- Linux新手入门:通过chmod改变文件权限
- Hadoop学习日志之大数据概念
- 整除