zoukankan      html  css  js  c++  java
  • 动态规划 最长公共子序列 王子和公主 Prince and Princess UVa 10635

    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn = 250 * 250;
    
    int main(){
    	char T;
    	cin >> T;
    	for (char k = 0; k < T;k++)
    	{
    		int n, p, q;
    		cin >> n >> p >> q;
    		int num[maxn];
    		memset(num, 0, sizeof(num));
    		int temp;
    		for (int i = 0; i < p; i++){
    			cin >> temp;
    			num[temp] = i; 
    		}
    		int S[maxn];
    		int size = 0;
    		for (int i = 0; i < q; i++) {
    			cin >> temp;
    			if (num[temp]){
    				S[size++] = num[temp];
    			}
    		}
    //降低复杂度, 由于这些数字并不重复,  所以可以将他们映射到1-n
    //这样,  公共子序列问题就转化为 公共递增子序列问题
    //下面是LIS算法
                    int stack[maxn];
    		for (int i = 0; i < maxn; i++) stack[i] = maxn;
    		int ans = 1;
    		for (int i = 0; i < maxn; i++){
    			int count = lower_bound(stack + 1, stack + n + 1, S[i]) - stack;
    			if (count>ans) ans = count;
    			stack[count] = S[i];
    		}
    		cout << "Case " << k <<": "<< ans<<endl;
    	}
    }


  • 相关阅读:
    Working with nil
    Determining Equality of Objects
    NSLog中的%@
    ld
    恢复HDFS误删数据
    一个缓冲区溢出示例
    SpringBoard
    Symbol Table
    feof使用注意
    -g vs -rdynamic
  • 原文地址:https://www.cnblogs.com/Pomodori/p/4316617.html
Copyright © 2011-2022 走看看