【问题描述】
又是中秋、又是国庆!双节狂欢,高速路繁华。
某高速路旁,整齐排列许多格子铺,依次用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;
}
为何有误