程式設計思維Week3 作業 B 區間選點

2021-10-03 14:44:42 字數 851 閱讀 7660

數軸上有 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...