caioj 1078 dp
来源:互联网 发布:数据挖掘 关联规则 编辑:程序博客网 时间:2024/06/08 05:59
题目描述
【问题描述】
有n条线段(给出起点和末端),分别坐落在数轴上,要求它们之间彼此不重叠的条件下,最大可以覆盖数轴的长度。(数轴的长度指线段覆盖数轴数字的个数)(1~3和3~4的线段视为重叠)
【输入】
第一行一个整数n(1<=n<=1000)
第2~n+1行,每行两个整数start和end,描述线段的起点和末端,所有线段都落在[0,2000]的范围内。
【输出文件】
一个整数,表示最多覆盖数轴的长度。
第一次秒题!。
按起点排序后直接从前面找能转移过来的状态。
取max即可。
事实证明手打快排真的不好
#include<cstdio>#include<algorithm>using namespace std;struct edge{int l,r;}p[2001];int n,f[2001];//void qsort(int x,int y)//{//int i=x,j=y,k=l[(i+j)/2];//while (i<=j)//{//while (l[i]<k) i++;//while (l[j]>k) j--;//while (i<=j)//{//int t;//t=l[i];l[i]=l[j];l[j]=t;//t=r[i];r[i]=r[j];r[j]=t;//i++;j--;//}//}//if (i<y) qsort(i,y);//if (x<j) qsort(x,j);//}int cmp(edge x,edge y){if(x.l==y.l) return x.r<y.r;return x.l<y.l;}int main(){scanf("%d",&n);for (int i=1;i<=n;i++){scanf("%d%d",&p[i].l,&p[i].r);}sort(p+1,p+n+1,cmp);for (int i=1;i<=n;i++)f[i]=p[i].r-p[i].l+1;for (int i=1;i<=n;i++)for (int j=1;j<=i-1;j++){if (p[j].r<p[i].l) f[i]=max(f[i],f[j]+p[i].r-p[i].l+1);}int max1=0;for (int i=1;i<=n;i++)max1=max(max1,f[i]);printf("%d",max1);return 0;}
阅读全文
0 0
- caioj 1078 dp
- caioj 1070 dp
- caioj 1077 dp
- 小白算法练习 树状dp caioj 二分苹果树
- [caioj 1114]多叉苹果树---树形dp+01背包
- [caioj 1425][状态压缩]游戏---状态压缩dp
- caioj.1097 树状数组
- caioj.1031 搜索初步
- caioj.1032 搜索初步
- caioj.1033 搜索初步
- caioj.1034 搜索初步
- caioj.1035 搜索初步
- caioj.1036 搜索初步
- caioj.1037 搜索初步
- caioj.1038 搜索初步
- caioj.1039 搜索初步
- caioj.1040 搜索初步
- caioj.1042 背包搜索
- 由LeetCode 1.Two Sum引起的几个问题
- codevs 1983 等式问题 dfs
- git笔记
- 限制长度的字符串函数
- CSS属性的代码以及功能的说明
- caioj 1078 dp
- 面试准备之okhttp的使用及源码分析(一)
- 邮件发送(未加SSL)
- 机器学习笔记(三)之朴素贝叶斯
- 深度学习图像识别
- 51nod-1103-N的倍数
- Codevs 1039 数的划分
- fg、bg的区别
- Android监听自身被卸载与监听其他应用被卸载、安装