• Diworth定理


    Diworth定理

    一个序列中下降子序列的最少划分数个数等于最长上升子序列的长度。

    一个序列中上升子序列的最少划分数个数等于最长下降子序列的长度。

    每句中的前后两者互为偏序关系。

    例题:

    Description

    LIS问题是最经典的动态规划基础问题之一。如果要求一个满足一定条件的最长上升子序列,你还能解决吗?
    给出一个长度为N整数序列,请求出它的包含第K个元素的最长上升子序列。
    例如:对于长度为6的序列<2,7,3,4,8,5>,它的最长上升子序列为<2,3,4,5>,但如果限制一定要包含第2个元素,那么满足此要求的最长上升子序列就只能是<2,7,8>了。

    Input

    第一行为两个整数N,K,如上所述。

    接下来是N个整数,描述一个序列。

    对于所有的数据,满足(0<n<=200000,0<k<=n)

    Output

    请输出两个整数,即包含第K个元素的最长上升子序列长度。

    (Sample Input)

    8 6

    65 158 170 299 300 155 207 389

    (Sample Output)

    4

    利用Diworth定理可以把问题转化为求最长上升子序列,套一下模板就可以了...

    看看数据范围,不打暴力。用带lower_bound优化的最长上升子序列就行了...

    CODE:

    #include<bits/stdc++.h>
    using namespace std;
    int a[40001];
    int len=1;
    int dp[40001];
    int main()
    {
    	int tot;
    	cin>>tot;
    	for(int i=1;i<=tot;i++)
    		cin>>a[i];
    	tot--;
    	dp[1]=a[1];
    	for(int i=2;i<=tot;i++)
    	{
    		if(a[i]>dp[len])dp[++len]=a[i];
    		else *lower_bound(dp+1,dp+1+len,a[i])=a[i];
    	}
    	cout<<len<<endl;
    
    	return 0;
    }
    
  • 相关阅读:
    .net 调用SAP RFC的几种方法
    SAP FI 科目代码
    FI 常用表
    SD 相关表
    20170328 技巧-记事本001
    20170326 ABAP调用外部webservice实例
    20170326 ABAP调用外部webservice 问题
    20170325 ABAP调用webservice
    SAP 第四代增强-BTE
    经济学中的破窗理论
  • 原文地址:https://www.cnblogs.com/moyujiang/p/11626886.html
Copyright © 2020-2023  润新知