貪心演算法例1

2021-10-05 11:06:22 字數 1550 閱讀 9041

有n項工作,每項工作分別在si開始,fi結束。對於每項工作,你都可以選擇參加或者不參加,選擇參加就必須全程參與(開始和結束時間不可重複),問最多可以參加多少項工作。

思路:選擇最早結束的工作,這樣才能留下時間選擇更多工作

注:已排序

#include

template

<

class

t>

void

choose

(int n,t s[

],t f,

bool a)

else

a[i]

=false;}

intmain

(int argc,

char

** ar**)

或:

#include

template

<

class

t>

void

greedyselector

(int n,t s[

],t f)

;//函式宣告

intmain()

template

<

class

t>

void

greedyselector

(int n,t s[

],t f)

//函式定義

}printf

("最大工作量:");

printf

("%d\n"

,sum)

;}

注:未排序

#include

#include

using

namespace std;

struct act

acts[

100]

;//相當於struct act acts[100],結構陣列

bool

cmp(

const act &a,

const act &b)

intmain()

sort

(acts,acts+n,cmp)

;//按結束時間從早到晚排序

bool a[

100]

;//表示第i個工作選不選

int j=1;

int sum=1;

a[1]=

true

;//第乙個肯定選

for(

int i=

2;i<=n;i++

)else a[i]

=false;}

cout<<

"選擇以下工作:"

int i=

1;i<=n;i++)

cout<<

"選擇工作數:"

<}

結構陣列成員的訪問是以陣列元素為結構變數的, 其形式為: 結構陣列元素.成員名

相當於乙個二維構造, 第一維是結構陣列元素, 每個元素是乙個結構變數, 第二維是結構成員。

貪心演算法例題

貪心演算法 greedy 分階段地工作,在每乙個階段都可以認為所做的決定是最好的,而不用考慮後果。這就意味著得到的是區域性最優解決方案,當演算法結束時,如果乙個乙個區域性最優解能組成全域性最優解決,那麼就說明這個演算法是正確的 如果不是,則此演算法的到的結果就是乙個次優解。因此,如果使用貪婪演算法得...

貪心演算法例題

牛牛舉辦了一次程式設計比賽,參加比賽的有3 n個選手,每個選手都有乙個水平值a i.現在要將這些選手進行組隊,一共組成n個隊伍,即每個隊伍3人.牛牛發現隊伍的水平值等於該隊伍隊員中第二高水平值。例如 乙個隊伍三個隊員的水平值分別是3,3,3.那麼隊伍的水平值是3 乙個隊伍三個隊員的水平值分別是3,2...

貪心演算法例4

有1元 5元 10元 50元 100元 500元的硬幣無窮多枚,現在用這些硬幣支付s元,最少需要多少枚硬幣 例 輸入 763輸出 需要500元硬幣1枚 需要100元硬幣2枚 需要50元硬幣1枚 需要10元硬幣1枚 需要1元硬幣3枚 include include intmain int argc,c...