貪心演算法就是只要滿足我當前利益最大化即可,所以有時候得出的結果不是最優解。一般使用貪心演算法要滿足兩個條件:a.貪心選擇性質。b.最優子結構性質。
貪心選擇性質:這是貪心演算法與動態規劃的區別。也就是說,我通過區域性的最優來達到整體的最優。動態規劃一般是以「自底向上的方式解決問題(如數塔問題)」,而貪心是以「自上向下的方式解決問題(如hdu2037(活動安排)「。
最優子結構性質:這個性質是貪心和動規的共同點。也就是乙個問題的最優解要包含其子問題的最優解。
在用貪心演算法的時候關鍵在於:
1.如何證明每一步所做的貪心選擇,最終可以使最後結果最優。
2.如何制定可行的貪心策略。
hdu2037(活動安排)是乙個典型的貪心演算法。你只要每一步都選著占用時間最小的同時要使剩餘時間最大的,也就是說,每回你都要找乙個結束最早的
。當你找到第乙個後,一定要使剩餘的時間最長,以後每選乙個都要考慮這個問題。這樣你每一步都最優的話,結果也是最優的,你可以用反證法證明
這段文字的原文:
由此我們可以寫出**:
#include#include#includeusing namespace std;
struct aa[105];
//每一步都選著占用時間最小的同時要使剩餘時間最大的,也就是說,每回你都要找乙個結束最早的
bool cmp(a a, a b)
else
}int main()
sort(a, a + n, cmp);
for (j = 1; j < n; j++)
}printf("%d\n", sum); }
return 0;
}
這一題也可以由動態規劃演算法來做,但是由於個人dp掌握的不是很好,所以以後再來考慮吧。
但是這裡有一篇這題dp的做法文章還不錯:
HDU2037貪心演算法
problem description 今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心...
HDU2037 今年暑假不AC 貪心演算法
今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯播 永遠不要忘記關心國家大事 非常6 7 超級女生,以及王小...
貪心 HDU 2037題解
貪心 1 確定候選集 將同一節目的開始時間與結束時間以結構體的方式儲存。2 貪心策略 對候選集進行預處理 對所有節目的結束時間由小到大進行排序處理。遍歷一遍排好序的陣列 首先將陣列第乙個位置的節目加入到解集中,且記錄此節目的結束時間,再依次向後找當滿足當前節目的開始時間比之前剛加入到解集中的節目的結...