POJ 2376 簡單的區間貪心問題

2021-09-26 01:29:19 字數 858 閱讀 6586

簡單翻譯:

給你乙個長度為t的時間區間,區間從1開始,每乙個時間點都需要有奶牛在工作,有n頭奶牛,給你每個奶牛的工作區間,讓你從這些奶牛中選一些奶牛,讓其覆蓋t這個時間區間,有兩個條件

1.每個時間點都需要有奶牛工作

2.盡可能少的使用奶牛

分析

我們可以位元組把題目中給定的條件就想象成乙個乙個的區間,讓我們先想乙個問題,有那麼些固定的區間(可能交錯,可能分離),也就是奶牛的工作區間,選擇其中一些,讓它們都覆蓋整個大區間,也就是我們的t區間。如果是這樣,我們會怎麼選擇。 第一印象,我們會先把長的選出來,但是其實稍微有一點貪心經驗的人都能輕易的分析出這是錯誤的,再仔細去思考,我們要保證覆蓋完整個t區間,所以我們必須要保證我們選擇的小區間的開始位置,小於或者等於當前t區間剩餘區域的開始位置,再滿足這個條件之下,怎麼使奶牛用的更少呢?那就是需要讓我們本次選擇的小區間覆蓋t的更多的位置,所以,我們貪心的規則就是,小區間滿足其開始位置小於等於t區間剩餘區間的開始位置的情況下,讓結束位置盡可能的遠離t區間剩餘的開始位置,這樣的貪心規則就能得到結果了。

**實現:

#include #include #define max(x,y) x > y ? x : y

#define n 25005

typedef structdur;

dur nodes[n];

int cmp(const void *a,const void *b)

int main()else}}

if(cur <= t && m >= t)else if(cur > t)else

}

poj2376解題報告

給定n個小區間以及區間起點終點,求能用它們覆蓋區間 1,t 的最小組合。也是看了別人的思路我才做出來的,比較精簡。思路 先把資料排序。把time設為當前起點,最開始的起點為1,所以尋找開始起點為1的裡面結束時間最晚的那個資料 1當作下乙個起點time。之後遍歷,尋找 time裡面結束時間最晚的那個資...

poj 2376 選擇工作區間問題 貪心演算法

題意 給一些工作區間,如何選取最小的工作數量,覆蓋 1,t 的工作時長 一開始的思路,當然也是錯誤的思路 解題思路 標記起點,當然對提供的工作區間,按開始的時間從小到大排序。對能夠覆蓋起點 即可選的工作區域 選擇結束時間最晚的 即工作時長最長的 更新起點 中的小技巧 主要針對第二個解題思路 可選區域...

POJ 3280 簡單區間 DP

就是想的時候不要想漏了轉移方式。對於乙個回文串 去掉最左和最右兩個後依然是回文串,好了。dp 轉移有三種,一種是從 dp i 1 j 轉移過來,一種是從 dp i j 1 轉移過來,一種是從 dp i 1 j 1 轉移過來 include include include include includ...