3095 黑心的市长

 时间限制: 1 s
 空间限制: 32000 KB
 题目等级 : 钻石 Diamond
 
题目描述 Description

A市有一条长Nkm的高速公路。有M个人各自想承包下a~b的路段。

这不给点钱是不行的,每人给ci元。

市长很黑心,想赚很多钱。如果同时允许多人承包同一路段,是不行的。

求市长最多赚多少钱。

输入描述 Input Description

正整数N  M

M行,ai,bi,ci。

输出描述 Output Description

钱数

样例输入 Sample Input

10 3

1 5 10

4 7 9

7 10 8

样例输出 Sample Output

18

数据范围及提示 Data Size & Hint

M《=500,N《=1014,ci《=109.

【题目大意】每一条线段都有一定的价值,求线段两两不覆盖能得到的最大价值。

【思路】序列dp 不能是越多线段越好,要求价值最大。f[i]为前i条线段能获得的最大值。最后 max{f[i---m]}

【code】

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
long long n,m,ans,f[];
struct E
{
long long x,y,v;
}s[];
bool cmp(E a,E b)
{
return a.y<b.y;
}
int read()
{
long long f=,x=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();}
while(ch>=''&&ch<=''){x=x*+ch-'';ch=getchar();}
return f*x;
}
int main()
{
n=read();m=read();
for(int i=;i<=m;i++)
{
s[i].x=read();s[i].y=read();s[i].v=read();
}
sort(s+,s+m+,cmp);
for(int i=;i<=m;i++)
for(int j=;j<i;j++)
if(s[i].x>=s[j].y)
f[i]=max(f[j]+s[i].v,f[i]);
for(int i=;i<=m;i++)
ans=max(ans,f[i]);
printf("%d\n",ans);
return ;
}
//f[1--m] 1 30 67 91 101 100

最新文章

  1. js 实现图片实时预览
  2. c++程序员必知的几个库
  3. jsp和servlet中文乱码
  4. Maven - 解决Maven下载依赖包速度慢问题
  5. 2015年第5本(英文第4本):Death on the Nile尼罗河上的惨案
  6. QTP11.00安装+破解详细教程
  7. IceGrid负载均衡部署 z
  8. c#委托和事件(上)
  9. iOS开发系列之触摸事件
  10. 【转】对memcached使用的总结和使用场景
  11. 5.6.3 String类型
  12. 搭建Windows SVN服务器及TortoiseSVN使用帮助和下载
  13. Java提供的enum详解
  14. tomcat和nginx配置java服务器
  15. UOJ274 [清华集训2016] 温暖会指引我们前行 【LCT】【最大生成树】
  16. windows 系统错误码总结
  17. 关于element-ui日期选择器disabledDate使用心得
  18. Node入门教程(6)第五章:node 模块化(上)模块化演进
  19. CF903G Yet Another Maxflow Problem
  20. how2j网站前端项目——天猫前端(第一次)学习笔记5

热门文章

  1. react/redux组件库、模板、学习教程
  2. java资源分享、面试题资料、分布式大数据
  3. 百科知识 DMG文件如何打开
  4. python读取txt、csv和excel文件
  5. electron 缓存目录 禁用缓存
  6. POJ 3978(求素数)
  7. 分享ArcGIS Server 10.0修复安装心得
  8. 使用CCriticalSection类的注意事项
  9. linux 启动ftp服务,sftp服务
  10. mysql-介绍、MySQL部署、数据类型、存储引擎