【基础练习】【贪心】codevs1214 线段覆盖题解

本文探讨了如何使用贪心算法解决线段覆盖问题,包括输入格式、问题描述、解决思路以及代码实现,旨在通过简化线段选择过程,确保最终线段集两两之间没有内部公共点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章被盗还是很严重,加版权信息

转载请注明出处 [ametake版权所有]http://blog.youkuaiyun.com/ametake欢迎来看看

这道题目是以前写的,但是没有发到这里,那时还没有这个博客。现在发到这里来主要是为下一道题线段覆盖2铺垫一个。先有序化处理再操作的思想是一样的。这道题目也可以用相似的DP做,codevs题解上还有人用最大团什么的根本听不懂得东西= =

题目

题目描述 Description

    给定x轴上的N(0<N<100)条线段,每个线段由它的二个端点a_I和b_I确定,I=1,2,……N.这些坐标都是区间(-999,999)的整数。有些线段之间会相互交叠或覆盖。请你编写一个程序,从给出的线段中去掉尽量少的线段,使得剩下的线段两两之间没有内部公共点。所谓的内部公共点是指一个点同时属于两条线段且至少在其中一条线段的内部(即除去端点的部分)。

输入描述 Input Description

    输入第一行是一个整数N。接下来有N行,每行有二个空格隔开的整数,表示一条线段的二个端点的坐标。

输出描述 Output Description

    输出第一行是一个整数表示最多剩下的线段数。

样例输入 Sample Input

3

6  3

1  3

2  5

样例输出 Sample Output

2

数据范围及提示 Data Size & Hint

0<N<100


代码

//codevs1214 线段覆盖 贪心
//每次保留右端点最小的先端,重叠的delete,画一张图即可证明
//1、前一条线段与后一条线段不相交——直接选上即可
//2、相交——若前一条线段完全包含这一条线段,那么就不选前一条,而选这一条,否则不选这一条
#include
  
   
#include
   
    
using namespace std;

const int maxn=100+10;
int l[maxn],r[maxn];
bool st[maxn];

int main(){
	int n;
	scanf("%d",&n);
	for (int i=0;i
    
     r[i]){
			int temp=l[i];
			l[i]=r[i];
			r[i]=temp;
		}
    }
    for (int i=0;i
     
      r[j]){
    			int temp1=r[i];
    			int temp2=l[i];
    			r[i]=r[j];l[i]=l[j];
    			r[j]=temp1;l[j]=temp2;
			}
		}
	}
	memset(st,true,sizeof(st));
	for (int i=0;i
      
     
    
   
  



—— 正是江南好风景,落花时节又逢君。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值