/*
題目:
給定乙個時間t和n個時間區間,求最少需要多少個區間覆蓋總區間[1,t],無法覆蓋區域[1,t]時輸出-1。
例如t=10,有3個區間[1,7],[3,6],[8,10],則最少需要兩個區間來覆蓋,選擇區間1和區間3。
解題思路:
使用貪心法。首先將區間按開始時間從小到大排序,開始時間相等按結束時間從小到大排序。
1 如果第乙個區間不是從1開始,則無法覆蓋,輸出-1。
2 令當前覆蓋到的時間time為開始時間為1的區間中結束時間的最大值。
3 從開始時間不為1的區間開始迴圈遍歷。
4 選擇合法區間中結束時間值最大的那個區間,合併到[1,time],合併後time為選擇的區間的結束時間。所謂合法區間是指區間的起始時間start<=time+1,這樣才能和區間[1,time]合併。如果沒有找到合法區間或者找到的區間結束時間比time小,則無法覆蓋,結束迴圈。
5 迴圈結束後,根據time是否大於等於t,輸出結果。
*/#include
#include
#include
#include
using namespace std;
struct qujian
;bool comp(qujian a,qujian b)
int main()
max=temp;//記錄最大的結尾
}if(tempelse
printf("%d\n",count);
}return 0;}/*
4 10
3 10
1 24 10
10 11
*//*
3 10
1 73 6
6 10
*//*
4 10
1 10
3 54 8
6 10
*/
堆區 棧區 靜態區 常量區還有???
常見的儲存區域可分為 由編譯器在需要的時候分配,在不需要的時候自動清楚的變數的儲存區。裡面的變數通常是區域性變數 函式引數等。由new分配的記憶體塊,他們的釋放編譯器不去管,由我們的應用程式去控制,一般乙個new就要對應乙個delete。如果程式設計師沒有釋放掉,程式會一直占用記憶體,導致記憶體洩漏...
c 棧區 堆區 常量區
c 中棧區 堆區 常量區 由一道面試題目而學習 2009 04 28 21 01 include void main 對應的彙編 10 a c 1 00401067 8a 4d f1 mov cl,byte ptr ebp 0fh 0040106a 88 4d fc mov byte ptr ebp...
記憶體的使用 棧區 堆區 靜態區 唯讀區
記憶體的使用感覺好亂啊,需要整理一下!於是參考c primer與網上資源,整理如下 一 綜述 記憶體中的棧區分配的是區域性變數和函式的引數值的空間,棧的生長方向是從高往低的 堆區是向上增長的用於分配程式設計師申請的記憶體空間 比如new 申請的動態記憶體 注意它與資料結構中的堆是兩回事,分配方式倒是...