URAL 1078 Segments

Posted Wisdom+.+

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了URAL 1078 Segments相关的知识,希望对你有一定的参考价值。

URAL 1078

思路:

dp+记忆化搜索

状态:dp[i]表示第i个线段最多包含多少个线段(包括自身)

状态转移:dp[i]=max(dp[i],1+dp[j])线段j包含于i

记录路径,递归输出路径

代码:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mem(a,b) memset(a,b,sizeof(a))

const int N=500;
int dp[N];
int pre[N];
struct seg{
    int l,r; 
}a[N];
int n;
int dfs(int x){
    if(dp[x]!=-1)return dp[x];
    dp[x]=1;
    for(int i=1;i<=n;i++){
        if(i!=x){
            if(a[x].l<a[i].l&&a[i].r<a[x].r){
                if(dp[x]<1+dfs(i)){
                    dp[x]=1+dfs(i);
                    pre[x]=i;
                }
            }
        }
    }
    return dp[x];
}
void print(int x){
    if(x==-1)return ;
    print(pre[x]);
    cout<<x<< ; 
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    mem(dp,-1);
    mem(pre,-1);
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i].l>>a[i].r;
    int ans=0,id=0;
    for(int i=1;i<=n;i++){
        int t=dfs(i);
        if(t>ans){
            ans=t;
            id=i;
        }
    }
    cout<<ans<<endl;
    print(id); 
    cout<<endl;
    return 0;
} 

 

以上是关于URAL 1078 Segments的主要内容,如果未能解决你的问题,请参考以下文章

PAT Basic 1078

PAT 1078. 字符串压缩与解压

1078. 字符串压缩与解压 (20)

1104 Sum of Number Segments(二刷)

如何从 UISegmentedControl 的选定段呈现 UIPopover

1078. Bigram 分词『简单』