站外题求助(听说灌水区有大佬)
  • 板块灌水区
  • 楼主wzm_xmxx23
  • 当前回复1
  • 已保存回复1
  • 发布时间2023/11/14 20:41
  • 上次更新2023/11/14 22:11:57
查看原帖
站外题求助(听说灌水区有大佬)
959670
wzm_xmxx23楼主2023/11/14 20:41

【问题描述】

又是中秋、又是国庆!双节狂欢,高速路繁华。

某高速路旁,整齐排列许多格子铺,依次用1到N编号。车马劳顿,休息、就餐的,人声鼎沸。

由于格子铺比较小,一个家庭可能会直接租用编号连续的格子铺。格子铺租用需要提供一个清单,上面用一对整数start-end(1<=start<=end<=N),表示一个区间:一些连续的格子铺,比如1-3,7-8,3-4等等。区间可以任意选择,但不能重叠。

当然,格子铺运营商希望出租得越多越好。现在给出一些需求清单(区间),请你编程帮助运营商找一些区间,使他能够出租最多的格子铺。

在上面的例子中,1-3和3-4是重叠的。聪明的你应该选择{1-3,7-8},这样可以同租 5个格子铺。

同一格子铺只能出租一次。

【输入格式】

第一行,整数p。

第2到p+1行,每行两个整数,表示一个区间,较小的端点在前面。

【输出格式】

一行一个整数,表示最多能够出租的格子铺数量 。

【输入样例】

3

1 3

7 8

3 4

【输出样例】

5

【数据范围】

对于20%的数据:p<=10。

对于50%的数据:p<=200。

对于100%的数据:1<=N<=2000,1<=p<=1000

我的的代码:

#include<iostream>
using namespace std;
struct E{
    int u,v;
};
E e[2005];
int dp[2005],n,maxx=0;
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>e[i].u>>e[i].v;
        int mx=0;
        for(int j=1;j<i;j++){
            if(e[j].v<e[i].u&&dp[j]>mx){
                mx=dp[j];
            }
        }
        dp[i]=mx+(e[i].v-e[i].u+1);
        if(dp[i]>maxx){
            maxx=dp[i];
        }
    }
    cout<<maxx;
    return 0;
}

为何有误

2023/11/14 20:41
加载中...