美文网首页
AcWing 1010. 拦截导弹

AcWing 1010. 拦截导弹

作者: 来到了没有知识的荒原 | 来源:发表于2020-09-18 15:51 被阅读0次

AcWing 1010. 拦截导弹

这个题是真的太神奇了,数学证明出来的性质(Dilworth定理):
“能覆盖整个序列的最少的不上升子序列的个数”等价于“该序列的最长上升子序列长度”
同理即有:
“能覆盖整个序列的最少的不下降子序列的个数”等价于“该序列的最长下降子序列长度”

#include<bits/stdc++.h>
using namespace std;

const int N=1010;
int a[N];
int f[N];

int main(){
    int n=0;
    int res=0;
    while(cin>>a[n])n++; 
    
    for(int i=0;i<n;i++){
        f[i]=1;
        for(int j=0;j<i;j++){
            if(a[i]<=a[j])
                f[i]=max(f[i],f[j]+1);
        }
        res=max(res,f[i]);
    }
    
    cout<<res<<endl;
    
    res=0;
    for(int i=0;i<n;i++){
        f[i]=1;
        for(int j=0;j<i;j++){
            if(a[i]>a[j])
                f[i]=max(f[i],f[j]+1);
        }
        res=max(res,f[i]);
    }
    cout<<res<<endl;
    
    return 0;
}
```z

相关文章

网友评论

      本文标题:AcWing 1010. 拦截导弹

      本文链接:https://www.haomeiwen.com/subject/umjryktx.html