问题标题: 酷町堂:3915 读书计划

0
0

0
已采纳
李奕歌
李奕歌
初级天翼
初级天翼

很简单啊

AC:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int maxn = 510;
int n;
int b[maxn],c[maxn];
struct node{
    int st,ed,num;
}a[maxn];
bool cmp(node x,node y){
    if(x.st!=y.st) return x.st<y.st;
    else return x.ed<y.ed;
}
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%d%d",&a[i].st,&a[i].ed);
        a[i].num=a[i].ed-a[i].st+1;

    }
    sort(a+1,a+1+n,cmp);
    for(int i=1;i<=n;i++) b[i]=a[i].num,c[i]=1;
    int max1=-1,max2=-1;
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<i;j++)
        {
            if(a[j].ed==a[i].st&&b[j]+a[i].num-1>=b[i])
            {
                b[i]=b[j]+a[i].num-1;
                c[i]=c[j]+1;
            }
        }
        max1=max(max1,b[i]); 
    }
    for(int i=1;i<=n;i++){
        if(max1==b[i]) max2=max(max2,c[i]);
    }
    for(int i=1;i<=n;i++){
        if(b[i]==max1&&max2==c[i])
        {
            cout << b[i] << " " << c[i];
            break;
        }
    }
    return 0;
}

望采纳,谢谢

我要回答