UVA111 LCS
来源:互联网 发布:王奔宏淘宝店网址 编辑:程序博客网 时间:2024/06/08 18:16
//// main.cpp// uva111//// Created by 丁宇阳 on 15-6-2.// Copyright (c) 2015年 丁宇阳. All rights reserved.//#include <cstdio>#include<algorithm>using namespace std;int main() { int len; scanf("%d",&len); int A[30],B[30]; for(int i=1;i<=len;i++) { int p; scanf("%d",&p); A[p]=i; } int p; while(~scanf("%d",&p)) { B[p]=1; int d[30][30]; for(int j=2;j<=len;j++) { int p; scanf("%d",&p); B[p]=j; } for(int i=0;i<=len;i++) d[i][0]=d[0][i]=0; for(int i=1;i<=len;i++) { for(int j=1;j<=len;j++) { if(A[i]==B[j]) { d[i][j]=d[i-1][j-1]+1; // printf("jia d[%d][%d]=%d\n",i,j,d[i][j]); } else { d[i][j]=max(d[i-1][j],d[i][j-1]); //printf("d[%d][%d]=%d\n",i,j,d[i][j]); } } } printf("%d\n",d[len][len]); } return 0; }
1.首先这题最坑爹的是输入要进行转化,不能直接读取到数组中,他相当于输入1,2,3,4,5。。。。。。的每一个下标
2.这里我采用的是填表法的dp,特点在于相当于给你一张表格,已经有了几个空填上答案了,而且知道规则,要求把所有
的空填满
3.值得注意的是需要初始化的不止0,0和0,1和1,0
4.如果不采用~scanf的读取模式而是while(1)的模式读取B数组,会导致TLE
5.:LCS的转移方程巧妙之处:
1.求最长的公共序列,它并用四重循环A[i]~A[j] B[i']~B[j']
2.从父亲序列的收缩的角度考虑
0 0
- UVA111 LCS
- UVa111
- uva111
- uva111
- uva111
- uva111 - History Grading(最长公共子序列LCS)
- uva111 lcs 但是和顺序是有关的
- UVA111 (DP)
- uva111(dp)
- uva111---History Grading
- uva10003+uva765+uva111
- LCS
- LCS
- lcs
- LCS
- LCS
- LCS
- LCS
- 交叉编译 libde265 到arm32位库
- BZOJ_1010 玩具装箱
- icvCreateHaarTrainingData和icvCreateBackgroundData
- hdu-5246(超级赛亚ACMer)(简单贪心)------2015年百度之星程序设计大赛 - 初赛(1)
- 预处理器简介
- UVA111 LCS
- [ERROR] Failed to execute goal org.apache.maven.plugins:maven-install-plugin:2.3.1:
- spring 注解 singleton prototype request session global session
- 什么是LAMP?
- Java-Swing编程之对话框案例详解
- PHP中编译Memcached的扩展
- 如何用简单易懂的例子解释隐马尔可夫模型?
- javascript闭包的学习
- email验证