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

2021-10-03 23:46:35 字數 951 閱讀 4125

b-區間選點

題目描述:

數軸上有 n 個閉區間 [a_i, b_i]。取盡量少的點,使得每個區間內都至少有乙個點(不同區間內含的點可以是同乙個)

input:

第一行1個整數n(n<=100)

第2~n+1行,每行兩個整數a,b(a,b<=100)

output:

乙個整數,代表選點的數目

sample input-1:

21 5

4 6sample output-1:

1sample input-2:

31 3

2 54 6

sample output-2:

2思路:

貪心演算法思想,首先對區間按照右端點的大小進行排序,然後從前往後依次查詢各個區間,按照右端點的原則判斷所查詢區間中是否存在該點,如果存在,則繼續往後執行,否則選擇當前區間的右端點。上述策略可以保證右邊界相同的區間,先選擇區間短的那個。較短短區間的點被選擇了,那麼相同右邊界的更大的區間肯定所選點。

總結:

本題開始進入貪心思想的演算法解題中,從區域性選擇最優解,然後實現整體解的最優化。

**:

#include

#include

using

namespace std;

int min_int=

1<<31;

struct node};

node k[

100000];

intmain()

cout<}

程式設計思維與實踐 Week3 作業

b 區間選點 貪心 c 區間覆蓋問題 貪心 給出n個正數,從其中選出k個數,使其總和為s,問 有多少種選數方案?input 第一行是正數t t 100 表示測試的組數。每一組都輸入兩行,第一行是三個整數n,k,s,第二行是n個正整數。output 每一組輸出結果佔一行,為方案的數目。sample i...

程式設計思維與實踐 Week3 作業

給定n個正數,從中選出k個數,令其和為s,求選數的方案數。對於每乙個數選擇與不選擇都進行dfs 邊界條件 選中k個數且和為s 選中數的個數大於k 選中數的和大於s 要選的數越界了 include using namespace std int ans 0 int a 2000 int n,k,s v...

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

題意 數軸上有n個閉區間,在數軸上選取盡量少的點,使得每個區間上都有乙個點,其中乙個點可以覆蓋多個區間。思路 將各個點用結構體記錄下來,分別記錄下左右邊界。不妨設左端點為a,右端點為b。對這些點進行排序,然後將區間按b 從小到大排序 b 相同時a 從大到小排序 然後從前往後進行選點,點為選擇前乙個區...