20190709種樹(洛谷P1250)

2022-05-08 19:51:10 字數 898 閱讀 4450

題目描述

一條街道的一邊有幾座房子,因為環保原因居民想要在路邊種些樹,路邊的居民被分割成 n 塊,並被編號為 1…n。每塊大小為乙個單位尺寸並最多可種一棵樹。每個居民想在門前種些樹並指定了三個數b,e,t。這三個數分別表示該居民想在b和e之間最少種t棵樹,當然b≤e,t≤e-b+1,允許居民想種樹的子區域可以交叉。出於資金緊缺的原因,環保部門請你求出能夠滿足所有居民的種樹要求時所需要種的樹的最少數量。 

輸入第一行為 n,表示區域的個數。

第二行為 h,表示房子的數目。

下面 h 行描述居民的需要:b,e,t(0<b≤e≤30000,t≤e-b+1)分別用乙個空格分開。

輸出輸出只有乙個數,為滿足所有居民的建議,所需要種樹的最少數量。 

樣例輸入

9

41 4 2

4 6 2

8 9 2

3 5 2

樣例輸出

5

提示30% 的資料滿足 0#includeusing namespace std;

struct xa[5005];

bool cmp(x x,x y)//這不是問題的關鍵

bool xyds[30005];

int main()

if(t>0)

}} cout<貪心即可解決(俺不會差分約束555)。結構體sort排序即可解決(這不是問題的關鍵)。思路:首先按照區間的結束位置(b)從小到大排序,若結束位置相同,則按照起始位置(e)從大到小排序(可用sort解決);然後就優先在區間的尾部種樹,數量為總數(t)減去已種數量。另外需要用bool陣列標記已種樹的位置,防止重複種樹。最終輸出ans即可。

洛谷 P1484 種樹

本題說每選乙個坑,它的左右兩個坑都不能選了,可是我們沒有辦法確定我們選某個坑一定是最優解,怎麼辦呢?我們設定乙個反悔機制,每當選乙個坑,就新設定乙個點,使這個點的值為這個坑兩邊的和減去當前坑的差.為什麼這樣做是對的呢?感性想一下,如果再後面的選坑過程中,我們選到了這個新設定的點,說明我們選上文的那個...

洛谷1250 種樹

一條街的一邊有幾座房子。因為環保原因居民想要在路邊種些樹。路邊的地區被分割成塊,並被編號為1.n。每個塊大小為乙個單位尺寸並最多可種一棵樹。每個居民想在門前種些樹並指定了三個號碼b,e,t。這三個數表示該居民想在b和e之間最少種t棵樹。當然,b e,居民必須保證在指定地區不能種多於地區被分割成塊數的...

洛谷1484 種樹

cyrcyr今天在種樹,他在一條直線上挖了n個坑。這n個坑都可以種樹,但為了保證每一棵樹都有充足的養料,cyrcyr不會在相鄰的兩個坑中種 樹。而且由於cyrcyr的樹種不夠,他至多會種k棵樹。假設cyrcyr有某種神能力,能預知自己在某個坑種樹的獲利會是多少 可能為負 請你幫助他 計算出他的最大獲...