zoukankan      html  css  js  c++  java
  • Dilworth定理

    Dilworth定理

    导弹拦截系统](https://www.acwing.com/problem/content/1012/)
    这个定理和一个对偶定理,讲的意思大概就是,给一个偏序关系,比如说是一个数它出现的位置i在另一个数出现的位置j之前,而且满足ai>aj.那么满足这个偏序关系的链就叫做链.关于链和反链:

    链(chain)是一个偏序集S的全序子集(所谓全序是指任意两个元素可以比较).
    反链(antichain)是一个偏序集S的子集,其中任意两个元素不可比较。

    Dilworth:
    最大链的长度等于最少反链覆盖数,而最大反链的长度等于最少链的覆盖数。

    #include<iostream>
    #include<algorithm>
    #include<cstring>
    using namespace std;
    
    const int N=1010;
    int a[N],f[N],dp[N];
    
    int main()
    {
        int x,res=0;
        int n=1;
        while(cin>>x)
        {
            a[n++]=x;
        }
        n--;
        //求一个最长不增子序列长度。
        for(int i=1;i<=n;i++)
        {
            f[i]=1;
            for(int j=1;j<i;j++)
            {
                if(a[j]>=a[i])  
                f[i]=max(f[i],f[j]+1);
            }
            res=max(res,f[i]);
        }
        cout<<res<<endl;
        //求一个最少反链覆盖数等价于最大链长度。
        
        
        int ans=0;
        for(int i=1;i<=n;i++)
        {
            dp[i]=1;
            for(int j=1;j<i;j++)
            {
                if(a[j]<a[i])  
                dp[i]=max(dp[i],dp[j]+1);
            }
            
            ans=max(ans,dp[i]);
        }
        
       
        cout<<ans;
        
        return 0;
    }
    
  • 相关阅读:
    构造函数和析构函数
    关联[2]
    关联模型[1]
    auth 权限控制
    多语言设置
    文件上传
    验证码
    图像处理
    Session 与 Cookie
    控制器[3]
  • 原文地址:https://www.cnblogs.com/forward-985/p/13666697.html
Copyright © 2011-2022 走看看