wikioi 3027 线段覆盖 2
数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段,使得这些线段两两不覆盖(端点可以重合)且线段价值之和最大。
n<=1000
第一行一个整数n,表示有多少条线段。
接下来n行每行三个整数, ai bi ci,分别代表第i条线段的左端点ai,右端点bi(保证左端点<右端点)和价值ci。
输出能够获得的最大价值
3
1 2 1
2 3 2
1 3 4
4
觉得这道题是最长递增子序列,因为可以用跟 线段覆盖 一样的预处理,按右节点递增排序,然后问题就转换为最长递增子序列了 ,w[i] 表示排好序后第 i 个线段的价值,dp[i] 表示当前的前 i 个线段所能获得最大价值,而
dp[i] = max{ dp[j] + w[i] } ( 1 <= j < i )
/*
作者:t_rex
题目:p3027 线段覆盖 2
*/
#include <iostream>
using namespace std;
int k[1000][3];
int w[1000];
void quicksort(int a[][3], int b, int e){
//快速排序
if(b >= e)
return;
int i = b, j = e + 1, n, m, k;
int x = a[i][1], y = a[i][0], z = a[i][2];
while(true){
while(a[++i][1] < x && i < j);
while(a[--j][1] > x);
if(i >= j)
break;
else{
n = a[i][0], m = a[i][1], k = a[i][2];
a[i][0] = a[j][0], a[i][1] = a[j][1], a[i][2] = a[j][2];
a[j][0] = n, a[j][1] = m, a[j][2] = k;
}
}
a[b][0] = a[j][0], a[b][1] = a[j][1], a[b][2] = a[j][2];
a[j][0] = y, a[j][1] = x, a[j][2] = z;
quicksort(a, j+1, e);
quicksort(a, b, j-1);
} int main(){
int n, i = 0, a, b, c, j, max_val = 0;
cin >> n;
for(; i < n; i++){
cin >> a >> b >> c;
if(a < b) swap(a, b);
k[i][0] = b, k[i][1] = a, k[i][2] = c;
}
quicksort(k, 0, n-1);
for(i = 0; i < n; i++) w[i] = k[i][2];
for(i = 1; i < n; i++){
for(j = 0; j < i; j++){
if(k[j][1] <= k[i][0] && w[j] + k[i][2] > w[i]) w[i] = w[j] + k[i][2];
max_val = max(max_val, w[i]);
}
}
cout << max_val ;
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
wikioi 3027 线段覆盖 2的更多相关文章
- CODEVS 3027 线段覆盖2
首先,先看题.....(虽然比较简单 3027 线段覆盖 2 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐 ...
- codevs 3027线段覆盖2
传送门 3027 线段覆盖 2 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标, ...
- wikioi 1214 线段覆盖
题目描述 Description 给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,--N.这些坐标都是区间(-999,999)的整数.有些线段 ...
- Codevs 1643 & 3027 线段覆盖
1643 题意 给定若干条线段,问最多可以安排多少条使得没有重合. 思路 贪心,同安排schedule,按结束时间早的排序. Code #include <bits/stdc++.h> # ...
- 线段覆盖 2(序列DP)
Code vs 3027 线段覆盖 2 题目描述 Description 数轴上有n条线段,线段的两端都是整数坐标,坐标范围在0~1000000,每条线段有一个价值,请从n条线段中挑出若干条线段, ...
- CODEVS3037 线段覆盖 5[序列DP 二分]
3037 线段覆盖 5 时间限制: 3 s 空间限制: 256000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description 数轴上有n条线段,线段的 ...
- CODEVS1643 线段覆盖3[贪心]
1643 线段覆盖 3 时间限制: 2 s 空间限制: 256000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 在一个数轴上有n条线段,现要选 ...
- COGS 265线段覆盖[线段树]
265. 线段覆盖 ★★☆ 输入文件:xdfg.in 输出文件:xdfg.out 简单对比时间限制:2 s 内存限制:20 MB [问题描述] 有一根长度为 L 的白色条状物.有两种操 ...
- CodeVS 线段覆盖1~5
#include <bits/stdc++.h> using namespace std; ; struct Info{int l,r;}P[Maxn]; int n,Cnt,F[Maxn ...
随机推荐
- Delegate 委托复习(-) 委托的基本概念
1. 声明一个delegate对象,它应当与你想要传递的方法具有相同的参数和返回值类型. 声明一个代理的例子: public delegate int MyDelegate(stri ...
- VB程序逆向反汇编常见的函数
VB程序逆向常用的函数 1) 数据类型转换: a) __vbaI2Str 将一个字符串转为8 位(1个字节)的数值形式(范围在 0 至 255 之间) 或2 个字节的数值形式(范围在 -32,7 ...
- 物联网操作系统HelloX应用编程指南
HelloX操作系统应用编程指南 HelloX应用开发概述 可以通过三种方式,在HelloX操作系统基础上开发应用: 1. 以内部命令方式实现应用,直接编译链接到HelloX的内核she ...
- LeetCode: Maximum Product Subarray && Maximum Subarray &子序列相关
Maximum Product Subarray Title: Find the contiguous subarray within an array (containing at least on ...
- Oracle中获取执行计划的几种方法分析
以下是对Oracle中获取执行计划的几种方法进行了详细的分析介绍,需要的朋友可以参考下 1. 预估执行计划 - Explain PlanExplain plan以SQL语句作为输入,得到这条S ...
- excel用vlookup,lookup时查询数据需要排序
如题,排出来的数据不对,之前没有是看清楚..所以记下来,日是后要小心点....
- ECshop 二次开发模板教程1
本教程适用于了解 ECshop 和 ECshop模板DIY 以及它们的日常使用,在查看前阁下需要至少会使用一种编辑器(exp:Dreamweaver, editplus, emacs, vi, ee ...
- 【c++内存分布系列】单继承
父类包括成员函数.静态函数.静态方法,子类包括成员函数.静态函数.静态方法的情况与一个类时完全一致,这里就不做分析了.子类单独包含虚函数时继承无关,也不做分析了. 一.父类子类都为空 #include ...
- POJ 1251 Jungle Roads
题意:嗯……没看题……看了眼图……求个最小生成树. 解法:kruskal. 代码: #include<stdio.h> #include<iostream> #include& ...
- hihoCoder 1385 A Simple Job
#1385 : A Simple Job 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 Institute of Computational Linguistics (I ...