【UVA】10635 Prince and Princess(LCS)】的更多相关文章

题目 传送门:QWQ 分析 水题.$ O(nlogn) $的LCS 代码 #include <bits/stdc++.h> using namespace std; *, INF=1e9; int S[maxn], g[maxn], d[maxn]; int num[maxn]; int main(){ int T; scanf("%d",&T); ;kase<=T;kase++){ int N,p,q,x; scanf("%d%d%d",…
求LCS的长度,Java版本: public static int LCS(int[]a,int[] b) { int [][]c=new int[a.length+1][b.length+1]; for(int i=1;i<=a.length;i++) { for(int j=1;j<=b.length;j++) { if(a[i-1]==b[j-1]) c[i][j]=c[i-1][j-1]+1; else c[i][j]=Math.max(c[i-1][j], c[i][j-1]); }…
标题效果:有两个长度p+1和q+1该序列.的各种元素的每个序列不是相互同.并1~n^2之间的整数.个序列的第一个元素均为1. 求出A和B的最长公共子序列长度. 分析:本题是LCS问题,可是p*q<=62500,O(pq)的算法显然会LE.在这里有一个条件,每一个序列中的各个元素互不同样,所以能够把A中元素又一次编号为1~p+1.比如,例子中A={1,7,5,4,8,3,9},B={1,4,3,5,6,2,8,9}.因此把A又一次编号为{1,2,3,4,5,6,7}.则B就是{1,4,6,3,0,…
直接LCS是时间复杂度是O(p*q)的,但是序列元素各不相同,只要把其中一个序列映射成有序的, 另外一个序列再做相同的映射,没有的直接删掉,就变成了求另一个序列LIS. #include<bits/stdc++.h> using namespace std; int read() { '); '; +c-'; return re; } *; int mp[maxn]; int S[maxn],g[maxn]; //#define LOCAL int main() { #ifdef LOCAL…
题意:有两个长度分别为p+1和q+1的序列,每个序列中的各个元素互不相同,且都是1~n2的整数.两个序列的第一个元素均为1.求出A和B的最长公共子序列长度. 分析: A = {1,7,5,4,8,3,9},B = {1,4,3,5,6,2,8,9}. 1.A中元素各不相同,因此将A中序列重新编号为1~p+1,即A中每个元素在A中是第几个出现的. 2.按照A中制定的编号原则给B重新编号,则B为{1,4,6,3,0,0,5,7},0表示这些元素在A中没有出现过. 3.新的A和B的LCS实际上就是新的…
题目 题目 分析 跟着lrj学的,理解了,然而不是很熟,还是发上来供以后复习 代码 #include <bits/stdc++.h> using namespace std; ; struct Point { int x,y; double rad; bool operator < (const Point &rhs) const{ return rad<rhs.rad; } }op[maxn],p[maxn]; int n,color[maxn]; bool left(P…
题目 题目     分析 lrj代码.... 还有is_final是保留字,害的我CE了好几发.     代码 #include <cstdio> #include <algorithm> using namespace std; int line[8][7]={ { 0, 2, 6,11,15,20,22}, // A { 1, 3, 8,12,17,21,23}, // B {10, 9, 8, 7, 6, 5, 4}, // C {19,18,17,16,15,14,13},…
题目 题目     分析 get一下IDA*的技巧,感觉总体来说不难,主要是剪枝比较难想. 这是lrj的代码,比较通俗易懂,关键就是选定一个区间再取出来,插入到一个位置,接下来转移到这个状态.     代码 #include <bits/stdc++.h> using namespace std; const int maxn=10; int n,a[maxn]; bool is_sorted() { for(int i=0;i<n-1;i++) if(a[i]>=a[i+1])…
题目 题目     分析 第一次用stringstream,真TMD的好用     代码 #include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n; getchar();//回车 while(n--) { string s1,s2; getline(cin,s1); getline(cin,s2); for(int i=0;i<s1.length();i++) if(!isalpha(s1…
题目qwq (第一道蓝题) 先把第一个序列每个数出现的顺序记下来(数字本身不用记), 然后第二个序列的每个数都对照它的顺序,这样只要得到一个升序的序列就行了qwq 如果遇到出现顺序在前面的数,就用二分法找一下它的位置,然后把原来存下来的顺序覆盖掉 #include<cstdio> using namespace std; ],ans[]; int n,sum; int k,l,r,now,mid; int main() { scanf("%d",&n); ; i &…