數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)。要求輸入n以及n個區間,輸出選點的數目
input
21546
output
1input
3132546
output
2
首先將所有區間按右邊界公升序,右邊界相同時左邊界降序進行排列。對每個區間設定乙個標誌flag判斷該區間是否已經有乙個點,依序對每個區間進行判斷,如果其中還沒有點,取該區間的右邊界確定為一點,可以使得該點被包含的區間個數最大化,體現貪心演算法,然後對該區間之後的每個區間,判斷這個點是否也在這些區間中,是則改變其標誌,在之後的迴圈中直接跳過它。
該題屬於區間問題之一,基本思想是貪心,遵守的貪心準則是對於其中還沒有點的區間取其右邊界為一點,使效益最大化,在正確的排序之後,這個點要麼在後面區間當中要麼小於其他區間的左邊界,可以保證沒有區間被忽略。
#include
#include
using
namespace std;
int n;
struct time t[
100]
;bool
compare
(time x, time y)
intmain()
int b;
if(i < n)
int index = i;
while
(index < n)
else index++;}
}printf
("%d\n"
, count)
;}
程式設計思維與實踐 Week3 作業 B區間選點
題意 數軸上有n個閉區間,在數軸上選取盡量少的點,使得每個區間上都有乙個點,其中乙個點可以覆蓋多個區間。思路 將各個點用結構體記錄下來,分別記錄下左右邊界。不妨設左端點為a,右端點為b。對這些點進行排序,然後將區間按b 從小到大排序 b 相同時a 從大到小排序 然後從前往後進行選點,點為選擇前乙個區...
程式設計思維與實踐 Week3 作業 B 區間選點
b 區間選點 題目描述 數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 sample input 1...
區間選點(week3 作業B)
數軸上有 n 個閉區間 a i,b i 取盡量少的點,使得每個區間內都至少有乙個點 不同區間內含的點可以是同乙個 input 第一行1個整數n n 100 第2 n 1行,每行兩個整數a,b a,b 100 output 乙個整數,代表選點的數目 examples input 21 5 4 6out...