有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...