今天學習了貪心。
//上午做的感覺太差了。。。
需要整理一下
下午貪心也沒聽聽懂。
貪心之二:教室活動安排問題
有若干個活動,第i個開始時間和結束時間是[si,fi),活動之間不能交疊,要把活動都安排完,至少需要幾個教室?
輸入第一行乙個正整數n (n <= 10000)代表活動的個數。
第二行到第(n + 1)行包含n個開始時間和結束時間。
開始時間嚴格小於結束時間,並且時間都是非負整數,小於1000000000
輸出一行包含乙個整數表示最少教室的個數。
輸入示例
31 2
3 42 9
輸出示例
2參考**
這是要解決什麼問題呢?
我一定要除錯才明白麼。。。。
算了,剛開始,多理解一些,否則畫的時間太久了。
#include#include#include#includeusing namespace std;
setsta, ed;
int l[10005], r[10005], a[20010];
// 先開陣列
int main()
// 輸入兩個資料,分別是開始時間和結束時間
//【insert是啥】
// 【已 輸入完成,輸入完成,輸入完成】
int len=0;
for(int i=0; i
包含max(),sort()
2、貪心需要用到 優先佇列,和sort()預設 是公升序,由小到大
3、ans = max(ans, k);所曾經達到的最多的。這個用法不錯,記一下。
【借鑑】
4、輸入1 5 2 8 3 9 的次序,記錄並儲存的話可以;
先有兩個陣列存一下,然後
int len = 0;
for (int i = 0; iy.start) return true;
return false;
}
優先的是 y結束的早(end值大)
或者,他們都一樣時間結束,但是x開始的晚(時間更少)
**貼上
#include#include#include#includeusing namespace std;
struct node
a[11111];
bool cmp(node x, node y)
int main()
// 然後第二個a[i], 判斷a[i].start >= end
// 就是 第二小的有沒有在他結束的時候ojbk
//如果有當然很好,如果沒有也沒關係
//每次push進去乙個,ans用來記錄。
} cout << ans << endl;
return 0;
}
(4) 看似最不對的策略——結束時間越早的活動優先。這個策略是有效的,我們可以證明。假設最優解opt中安排了m個活動,我們把這些活動也按照結束時間由小到大排序,顯然是不衝突的。假設排好順序後,這些活動是a(1) , a(2), a(3)….am
假設按照我們的貪心策略,選出的活動自然是按照結束時間排好順序的,並且也都是不衝突的,這些活動是b(1), b(2) …b(n)
【選出的】
問題關鍵是,假設a(1) = b(1), a(2) = b(2)…. a(k) = b(k),但是a(k+1) != b(k+1),回答幾個問題:
【在k以及k之後,他們不同了】
【f(b(k+1)) <= f(a(k+1))】
【b是最優 a是排好序的】
(1)b(k+1)會在a(k+2), a(k+3), …. a(m)中出現麼?
不會。因為b(k+1)的結束時間是最早的,即f(b(k+1)) <= f(a(k+1)),而a(k+2), a(k+3), …. a(m)的開始時間和結束時間都在f(a(k+1))之後,所以b(k+1)不在其中。
(2)b(k+1)和a(1), a(2), …. a(k) 衝突麼?
不衝突,因為a(1), a(2), …. a(k)就是b(1), b(2), …. b(k)
(3)b(k+1)和a(k+2), a(k+3), …. a(m)衝突麼?
不衝突,因為f(b(k+1)) <= f(a(k+1)),而a(k+2), a(k+3), …. a(m)的開始時間都在f(a(k+1))之後,更在f(b(k+1))之後。
因此我們可以把a(k+1) 換成b(k+1), 從而最優解和我們貪心得到的解多了乙個相同的,經過乙個乙個替換,我們可以把最優解完全替換成我們貪心策略得到的解。 從而證明了這個貪心策略的最優性。
最後,我們來提供輸入輸出資料,由你來寫一段程式,實現這個演算法,只有寫出了正確的程式,才能繼續後面的課程。
貪心 活動安排問題2
題目大意 有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?解題關鍵 策略 按照開始時間排序優先安排活動,如果衝突,則加乙個教室。1 利用優先佇列 1 include2 define inf 0x3f3f3f3f 3using...
SDUT 活動選擇問題2 貪心
time limit 1000 ms memory limit 65536 kib submit statistic problem description sdut 大學生藝術中心每天都有n個活動申請舉辦,但是為了舉辦更多的活動,必須要放棄一些活動,求出每天最多能舉辦多少活動。input 輸入包括...
貪心(教室安排問題 區間不相交可以用乙個)
有若干個活動,第i個開始時間和結束時間是 si,fi 同乙個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室?input 第一行乙個正整數n n 10000 代表活動的個數。第二行到第 n 1 行包含n個開始時間和結束時間。開始時間嚴格小於結束時間,並且時間都是非負整數,小於10000...