學習筆記17 貪心演算法

2021-10-06 06:21:15 字數 2214 閱讀 8540

給定n個閉區間,請你在數軸上選擇盡量少的點,使得每個區間內至少包含乙個選出的點,輸出選擇點的最少數量。

1、將每個區間按照右端點從小到大排序

2、從前往後依次列舉每個區間,如果當前區間已經包含點,則直接pass,否則選擇當前區間的右端點。

#include

#include

using

namespace std;

const

int n=

100010

;int n;

struct range

}range[n]

;int

main()

;}sort

(range,range+n)

;int res=

0,ed=

-2e9

;for

(int i=

0;i(range[i]

.l>ed)

printf

("%d\n"

,res)

;}

重點在於對小於號的過載,計數的方法 if(range[i].l>ed)

}range[n]

;int

main()

;}sort

(range,range+n)

;int res=

0,ed=

-2e9

;for

(int i=

0;i(range[i]

.l>ed)

printf

("%d\n"

,res)

;}n個人去大水,怎麼安排打水的時間才能最少。打水的等待時間。

按照打水的時間從小打大進行排序,這樣最終的打水時間是最少的。

#include

#include

using

namespace std;

const

int n=

100010

;int n;

int t[n]

;int

main()

在一條數軸上有 n 家商店,它們的座標分別為 a1~an。

現在需要在數軸上建立一家貨倉,每天清晨,從貨倉到每家商店都要運送一車商品。

為了提高效率,求把貨倉建在何處,可以使得貨倉到每家商店的距離之和最小。

f(x)=|x1-x|+……+|xn-x|

假設放在中間是最近的,經過驗證,很容易的到在中間是最近的。

#include

#include

using

namespace std;

const

int n=

100010

;int n;

int a[n]

;int

main()

農民約翰的n頭奶牛(編號為1…n)計畫逃跑並加入馬戲團,為此它們決定練習表演雜技。

奶牛們不是非常有創意,只提出了乙個雜技表演:

疊羅漢,表演時,奶牛們站在彼此的身上,形成乙個高高的垂直堆疊。

奶牛們正在試圖找到自己在這個堆疊中應該所處的位置順序。

這n頭奶牛中的每一頭都有著自己的重量wi以及自己的強壯程度si。

一頭牛支撐不住的可能性取決於它頭上所有牛的總重量(不包括它自己)減去它的身體強壯程度的值,現在稱該數值為風險值,風險值越大,這只牛撐不住的可能性越高。

你的任務是確定奶牛的排序,使得所有奶牛的風險值中的最大值盡可能的小。

按照wi+si從小到大的順序排序,最大危險係數是最小的

#include

#include

using

namespace std;

const

int n=

50010

;typedef pair<

int,

int> pii;

int n;

pii cow[n]

;int

main()

;}sort

(cow,cow+n)

;int res=

-2e9

,sum=0;

for(

int i=

0;i)printf

("%d"

,res)

;return0;

}

貪心演算法自主學習筆記

我之前雖然在上課時進行了已經算很多的練習,從簡到難。但是實際上理論方面,我完全沒有聽懂,不知道什麼時候用,怎麼用,反正經常聽見大佬們說貪心就好了,但是還是迷迷糊糊的,所以在這裡進行一些小小的學習記錄。我們都知道在求解乙個問題的可行解或者最優解 即是最優化 的題目時,我們往往可以運用貪心演算法對此類問...

貪心演算法學習筆記

貪心演算法是指在對問題求解時,總是做出在當前看來是最好的選擇。不從整體最優上加以考慮,只做出在某種意義上的區域性最優解。選擇的貪心策略必須具備無後效性,即某個狀態以前的過程不會影響以後的狀態,只與當前狀態有關。最優解問題大部分都可以拆分成乙個個的子問題,把解空間的遍歷視作對子問題樹的遍歷,則以某種形...

演算法學習筆記 貪心演算法

貪心也就是貪婪,就好比我們考試期末成績是由平時分和期末成績兩部分組成,我們複習時肯定是想要在考完當前這門之後的最短的時間內得到最多的分數。這就是貪心的思想。所謂貪心演算法 就是指 我們所做出的選擇在當前情況下總是最好的,它考慮的不是全域性最優解,而是 某種意義上的區域性最優解。核心思想 就是以區域性...