貪心法是在對問題進行求解時,只做出在當前情況下最好的解,即區域性最優解(而動態規劃是整體最優解)
建立數學模型,來描述問題
把問題分解成若干個子問題
對每一子問題求解,得到子問題區域性最優解
把每乙個子問題的區域性最優解合併成乙個解
有n個需要在同一天使用同乙個教室的活動a1,a2,…,an,教室同一時刻只能由乙個活動使用。每個活動ai都有乙個開始時間si和結束時間fi 。一旦被選擇後,活動ai就佔據半開時間區間[si,fi)。如果[si,fi]和[sj,fj]互不重疊,ai和aj兩個活動就可以被安排在這一天。該問題就是要安排這些活動使得盡量多的活動能不衝突的舉行。例如下圖所示的活動集合s,其中各項活動按照結束時間單調遞增排序。
#include
#include
using
namespace std;
struct act act[
100]
;bool
cmp(act a, act b)
intmain()
sort
(act, act + m, cmp)
;//排序函式
cout <<
"可最多安排的活動為:"
<< endl;
cout << act[0]
.start <<
" "<< act[0]
.end << endl;
int sum =1;
//安排的活動總數
int i =0;
for(
int j =
1; j < m; j++)}
cout <<
"最多安排的活動總數為:"
<< sum;
}
解析:該題可採用貪心法,按活動的最早結束時間來獲得區域性最優解
假設1元、2元、5元、10元、20元、50元、100元的紙幣分別有c0, c1, c2, c3, c4, c5, c6張。現在要用這些錢來支付k元, 至少要用多少張紙幣?
#include
using
namespace std;
intmain()
;//每張面值對應的數量
int value=
;//面值
cout <<
"請輸入你需要找零的金額:"
<< endl;
int n;
cin >> n;
int sum=0;
//找零錢幣總數
for(
int i =
6; i >=
0; i--)}
if(n ==0)
else
}
解析:運用貪心法,每一步找面值最大的紙幣 演算法學習 貪心法
只選擇乙個子問題 1.快2.不能保證獲得最優解,可以作為近似解,一般,在特殊情況下可保證最優解。3.適合於組合優化問題 貪心選擇策略 分解方案 s s0,c c0 部分解s,候選集c while complete s 解擴充套件 c c c中引數重新計算以及候選集調整 注意 實現時dist 的初始值...
演算法 貪心法
動態規劃在某一步決定優化函式的最大或者最小值時候,需要考慮子問題的優化函式值,從中選出最優的結果。貪心法 也是多不判斷,不考慮子問題的計算結果,根據當時情況採取 只顧眼前的 貪心策略決定取捨,工作量少於動態規劃很多,更具效率 可導致區域性最優化而不是全域性優化 n項活動,使用同乙個禮堂問題 si 和...
演算法 貪心法
感謝華北電力大學王墨玉老師的ppt 基礎知識 應用條件 最優子結構性質 原問題包含了其子問題的最優解 對於乙個問題可能會有不同的量度標準,選擇其中可以獲得最優解的量度標準是貪心法設計的核心問題 例題活動安排問題 可求得最優解 int greedyselector int s,int f,int a ...