貪心專題(1) 區間與點匹配

2021-08-08 16:18:42 字數 1407 閱讀 5519

前言

貪心這種東西特別的玄學,但它一般是基於排序後的資料,然後進行一波處理

其實有時實在不會寫的話就每種排序試一遍,沒準就ac了

題目描述要打仗了,作為將軍的你打算用庫存的**武裝你的士兵。庫存有m個**,每個**有乙個權重。 有n個士兵,每個士兵有乙個**權重範圍minwi和maxwi,只有權重在這個區間的**才能給這個士兵裝備。 請你算算,最多可以裝備多少士兵。

輸入第一行兩個整數n和m,表示士兵的人數和**的個數。 接下來n行,每行兩個整數表示每個士兵的權重範圍。 接下來m行,每行乙個整數表示某個**的權重。

輸出輸出最多可以裝備的士兵數量。

資料範圍:對於30%的資料,n和m的範圍[1,10];

對於70%的資料,n和m的範圍[1,2000];

對於100%的資料,n和m的範圍[1,20000],**權重範圍[1,1000],每個士兵的裝備範圍[1,1000];

分析下資料,可以得知這題n^2過不了

然後嘗試貪心

士兵有兩維的資料,乙個min,乙個max;

既然要貪心,肯定要讓其中一維有序,這樣在另外一維貪心(常規套路)

1.如果按min從小到大排

可能會有這樣一組資料:

士兵1:1(min) 5(max)

士兵2:3(min) 4(max)

兵器:4 5

如果按這種流程來的話

士兵1選第1個兵器

士兵2就選不了了

現在嘗試第二種貪心

2.按max從小到大排

這時可以過這個資料

士兵2:3(min) 4(max)

士兵1:1(min) 5(max)

兵器:4 5

然後給予證明:

首先我們兵器是有序的(從小到大)

我們每次去除滿足條件最小的兵器

就是說即使這個兵器被前面的選了,也沒有關係

因為我們選的是最小滿足條件的,使後面值更大的兵器能被後面的士兵選(這樣就不虧了嘛)

得出結論1

多重區間匹配多個點

使點具有單調性,然後把區間根據右區間排序

再按循序貪心即可

905 區間選點(貪心)

題目傳送門 題解思路參考大佬 給定 n 個閉區間 ai bi a i,b i ai b i 請你在數軸上選擇盡量少的點,使得每個區間內至少包含乙個選出的點。輸出選擇的點的最小數量。位於區間端點上的點也算作區間內。輸入格式 第一行包含整數 n 表示區間數。接下來 n 行,每行包含兩個整數ai,bi a...

1 區間選點 區間問題

區間問題一般都需要對區間進行排序,對左端點排序,或對右端點排序,或雙關鍵字排序 然後需要 證明這樣的選法選出來的點數一定是符合答案的,且是選點最少的 首先按照這個方法來選的話,每乙個區間上一定選了乙個點,所以這種選法是一種合法的方案 然後這道題的最優解是指所有合法方案中的選點最少的,所以 所以ans...

UVA 10382 (區間貪心)

注意每個圓管轄的區間不是最左或最右的端點而是和被覆蓋圖形的交點。直接按照每個圓的left排序 每次盡量尋找靠右的就可以了。include include include include include include include include include include include i...