一、问题描述 数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有一个点(不同区间内含的点可以是同一个)。输入格式: 第一行一个数字n,表示有n个闭区间。 下面n行,每行包含2个数字,表示闭区间[ai, bi]输出格式: 一个整数,表示至少需要几个点输入样例: 在这里给出一组输入。例如: 3 1 3 2 4 5 6输出样例: 在这里给出相应的输出。例如: 2
二、代码
#include <bits/stdc++.h> using namespace std; int main() { int n; cin>>n;int l[n],r[n]; for(int i = 0;i<n;i++) cin>>l[i]>>r[i]; for(int i = 0;i<n-1;i++){//右边界排序 int temp; for(int j = i+1;j<n;j++){ if(r[i]>r[j]){ temp = r[i]; r[i] = r[j]; r[j] = temp; temp = l[i]; l[i] = l[j]; l[j] = temp; } } } int count = 1; int p = r[0]; for(int i = 1;i<n;i++){ int flag = 0; if(p<l[i]){ count++; p = r[i]; } } cout<<count; return 0; }三、代码思路 先将区间按照右边界大小(即r[i])进行排序,寻找两个不同区间的相同集合,找到了计数器不用加一,找不到就将p移到另一区间的右边界,并且计数器加一
四、解题思路||感想 其实一开始由于我对动态规划,贪心算法不熟悉,我对这类题总会出现弱逻辑问题,这次也以为应该是错的,就碰巧提交到pta,没想到过了,我也懵逼。