ural 1203. Scientific Conference 夜

简单DP

http://acm.timus.ru/problem.aspx?space=1&num=1203

#include<iostream>
#include<string.h>
#include<algorithm>

using namespace std;

int f[30001];//下标表示结束点 所存数据为最晚开始的那个
int ans[30001];//ans[i]表示到这个点时最多参加数
int main()
{
    int n,i,l,T;
    cin>>n;
    for(i=0;i<30001;i++)
    f[i]=i;//f[i]==i 表示没有从此点结束的会议
    while(n--)
    {
        cin>>l>>i;
        if(l>f[i]||f[i]==i)
        f[i]=l;
    }
    ans[0]=0;
    T=0;
    for(i=1;i<30001;i++)
    {

        if(f[i]!=i)//两种情况
        {
            ans[i]=max(ans[f[i]-1]+1,ans[i-1]);
        }
        else
        {
            ans[i]=ans[i-1];
        }
        if(ans[i]>T)
        T=ans[i];
    }

    cout<<T<<endl;
    return 0;
}

原文地址:https://www.cnblogs.com/liulangye/p/2260726.html