10001 一本通 1 1 例 2 種樹

2021-08-30 04:27:49 字數 1333 閱讀 8608

題目題目題目

[題目描述]

某條街被劃為 n條路段,這 n 條路段依次編號為 1…n。每個路段最多可以種一棵樹。現在居民們給出了 hhh 組建議,每組建議包含三個整數 b,e,t,表示居民希望在路段 b 到 e 之間至少要種 t 棵樹。這些建議所給路段的區間可以交叉。請問:如果要滿足所有居民的建議,至少要種多少棵樹。

[輸入格式]

第一行為 n,表示路段數。

第二行為 h,表示建議數。

下面 h行描述一條建議:b,e,t,用乙個空格分隔。

[輸出格式]

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

[樣例輸入]

9

41 4 2

4 6 2

8 9 2

3 5 2

[樣例輸出]

5
[資料範圍與提示]

30%的資料滿足 0100%的資料滿足 0#include#includeusing namespace std;

struct node

/*定義結構體的作用我貌似在活動安排提及了一下,定義結構體就是為了排序

要求最優解,就是有乙個不斷走最有的一步的過程

所以排序起到很重要的作用

如果不是結構體排序的話,會導致兩兩對不上,那麼答案必然出錯

*/ a[210000];

int n,m;

bool v[210000];//

bool cmp(node n1,node n2)//結構體排序不解釋

int main()

sort(a+1,a+m+1,cmp);

/* 排序,之所以要用路段的結尾來排序,就是為了不漏掉要種的數

比如說:

1-31-5

1-8如果我們種了8這棵樹的話,只能兼顧到 1-8

但是如果我們種 1或者2或者3的話,那我們三組都可以兼顧

如果我們種 6或者7的話,就只能兼顧 1-8

所以這就是貪心

就是為了每一步都可以做到最好,兼顧到最多

*/ int ans=0; memset(v,false,sizeof(v));

//ans是用來儲存最少的種樹量 //v陣列是用來判斷當前的位置有沒有種過樹

for(int i=1;i<=m;i++)

}} printf("%d\n",ans);//輸出

return 0;

}

一本通 1 1 例 2 種樹

題目傳送門 這題的題目問的是要滿足所有居民的建議,至少要種多少棵樹。對於這種題目,我們首先想到的應該是貪心策略。貪心策略 首先按右端點從小到大排序,因為要求樹最少,所以要盡量放在右端點。然後定義乙個bool陣列判斷該點是否種過樹即可。從右端點開始種,可以讓更多的樹照顧到更右側的端點,這樣就能使種的數...

一本通 1 1 例 1 活動安排

題目link 貪心即可,將活動按右端點排序,排序後能選則選。o n 證明 首先對於乙個前面都為最優序列的前提下,如果對於乙個活動 a 使它發生是一種最優序列,然後再對於另乙個活動 b 它的結束時間比 a 早,並且開始時間也滿足條件,那麼根據貪心就可以選它,因為它既合法又是一種最優序列。1 inclu...

一本通 1 1 練習 2 數列分段

題目link 首先對於乙個序列,從 a 1 l 都符合最佳序列,假設對於第 l 1 個數,它放到從 l 1 r 的區間是一種最優的方法,並且它也可以放在從 1 l 1 這裡,那麼根據貪心,它放到 1 l 1 的序列中是合法的,而且也是一種最優方案。因此,這道題只需要貪心 能將當前數往左放就往左放。1...