nefu 演算法課設 貪心

2021-10-10 09:30:30 字數 3345 閱讀 5891

遞迴與分治

動態規劃

貪心演算法

回溯演算法

(1)問題描述:

設有n 個顧客同時等待一項服務。顧客i需要的服務時間為ti, 1<=i <= n 。應如何安排n個顧客的服務次序才能使平均等待時間達到最小?平均等待時間是n 個顧客等待服務時間的總和除以n。

(2)程式設計任務:

對於給定的n個顧客需要的服務時間,程式設計計算最優服務次序。

(3)資料輸入:

第一行是正整數n,表示有n 個顧客。接下來的1行中,有n個正整數,表示n個顧客需要的服務時間。

(4)結果輸出:

計算出的最小平均等待時間。

(5)輸入示例

1056 12 1 99 1000 234 33 55 99 812

#include

#include

using

namespace std;

const

int n=

1e5+10;

int a[n]

;int

main()

// cout("%.2lf"

,ans*

1.0/n)

;return0;

}/*1056 12 1 99 1000 234 33 55 99 812

532.00

*/

(1)問題描述:

給定x 軸上n 個閉區間。去掉盡可能少的閉區間,使剩下的閉區間都不相交。

(2)程式設計任務:

給定n 個閉區間,程式設計計算去掉的最少閉區間數。

(3)資料輸入:

第一行是正整數n,表示閉區間數。接下來的n行中,每行有2 個整數,分別表示閉區間的2個端點。

(4)結果輸出:

計算出的去掉的最少閉區間數。

(5)輸入示例

310 20

10 15

20 15

(6)輸出檔案示例

2

#include

#include

using

namespace std;

const

int n=

1e5+10;

typedef

struct

stu;

intcmp

(stu a,stu b)

stu p[n]

;int

main()

sort

(p+1

,p+1

+n,cmp)

;long

long ans=

1,s=p[1]

.r;for

(int i=

2;i<=n;i++)}

printf

("%lld\n"

,n-ans)

;return0;

}/*310 20

10 15

20 15

2*/

問題描述:一輛汽車加滿油後可行駛nkm。旅途中有若干加油站。設計乙個有效演算法,指出應在哪些加油站停靠加油,使沿途加油次數最少。

演算法設計:對於給定的n和k個加油站位置,計算最少加油次數。

資料輸入:n:表示汽車加滿油後可行駛nkm

k:旅途中有k個加油站

k+1個整數:表示第k個加油站與第k-1個加油站之間的距離。第0個加油站表示出發地,汽車已加滿油。第k+1個加油站表示目的地。

資料輸出:最少加油次數和具體在哪幾個加油站加油。

例如: n=7 k=7

k+1個整數:1 2 3 4 5 1 6 6

最優值:4

#include

#include

using

namespace std;

const

int n=

1e5+5;

int a[n]

;int

main()

int flag=0;

int s=

0,ans=0;

for(

int i=

1;i<=k+

1;i++

) s+

=a[i];if

(s>n)}if

(flag!=1)

else

printf

("無法到達終點\n");

return0;

}/*7 71 2 3 4 5 1 6 6

4*/

考慮將一系列活動安排在科學會堂。假設有n個活動,每個活動需要花費乙個單位時間。如果在時間t[i]或t[i]之前開始,則活動i將提供p[i]元的利潤,其中t[i]是任意的數字。如果乙個活動不是在t[i]或t[i]之前開始的,那麼在安排過程中它根本不會帶來任何利潤。如果所有事件都可以在0時刻開始。

輸入:n個活動的t[i]和p[i]

輸出:活動安排順序和獲得的利潤。

沒想到 正確的貪心方法。。太菜了。。

提供幾個hack 樣例 ,想到的幾種貪心方法,都被自己的特殊樣例 卡掉了。。

最後直接用的全排列 51

5253

5455

52512

345--

---31

3232

4732

1----3

1325

26113

21----31

3243

51212

3*/#include

#include

using

namespace std;

const

int n=

1e5+5;

const

int inf=

0x3f3f3f3f

;typedef

struct

stu;

stu p[n]

;int vis[n]

;int a[n]

,b[n]

;int

main()

//sort(p+1,p+1+n,cmp);

int ans=

0,mx=

0,x;do}

if(mx>ans)

}while

(next_permutation

(a+1

,a+1

+n))

;printf

("%d\n"

,ans)

;for

(int i=

1;i<=n;i++

)printf

("%d "

,b[i]);

return0;

}

NEFU 1265 貪心 優先佇列

problem 1265 time limit 1000ms memory limit 65535k 有n個任務,每個任務有乙個最晚結束時間以及乙個對應的獎勵。在結束時間之前完成該任務,就可以獲得對應的獎勵。完成每乙個任務所需的時間都是1個單位時間。有時候完成所有任務是不可能的,因為時間上可能會有衝...

演算法分析課設(六)跳躍問題

某n n的棋盤的每個格仔中都有1到9個整數。從棋盤的左上角出發,向右或向下每次跳躍格仔所指定的格數,判斷是否能夠到達棋盤的右下角。如果能,輸出true,否則輸出false。輸入 輸入第一行為整數n,表示棋盤方格的數量。其後的n行,各行均有n個數字。表示在該方格中可以向下或向右跳躍的方格數。輸出 輸出...

第10課 貪心演算法

貪心演算法是一種在每一步選擇中都採取在當前狀態下最好或最優 即最有 利 的選擇,從而希望導致結果是全域性最好或最優的演算法。貪心演算法與動態規劃的不同在於它對每個子問題的解決方案都做出選擇,不能回退。動態規劃則會儲存以前的運算結果,並根據以前的結果對當前進行選擇,有回退功能。貪心法可以解決一些最優化...