貪心法2題解

2021-10-11 09:15:07 字數 2282 閱讀 1056

種樹

大意:給你n個區間,使每個區間包含相應的t個數。

思路:此題為整數區間的加強版,先進行右端點排序,然後先統計已經種的樹減掉,接著再從右到左種,為後面打算,用乙個陣列標記是否種樹。

**

#include

using

namespace std;

struct zs a[

5001];

bool

cmp(zs x, zs y)

int n, h, i, j, ans, temp;

bool s[

30001];

intmain()

} temp =0;

} cout << ans;

return0;

}

噴水裝置

大意:給你幾組資料,每組n個噴頭,給出噴頭位置及半徑,求至少需要開幾個噴頭,澆灌不滿則輸出-1。

思路:可以通過公式計算出左端點和右端點,然後貪心貪盡量大的。

**

#include

using

namespace std;

struct interval a[

20000];

int tot, n, l, w;

int x[

20000

], r[

20000];

bool

cmp(interval a, interval b)

void

solve()

n = tot;

sort

(a +

1, a + n +

1, cmp)

;int i =1;

double cur =0;

int ans =0;

while

(i <= n)

if(a[i]

.b > cur)

cur = m;

ans++;if

(cur >= l)

i++;}

}int

main()

數列極差

大意:給n個數,每次刪掉2個再添上1個2數的積+1,求以此法得出的最大-最小。

思路:可以先排序,最大及先小後大擦,最小反之,由於擦掉其他部分有序,故可以用插入排,較快。

**

#include

using

namespace std;

bool

cmp(

int a,

int b)

long

long n, n2, a[

50001

], b[

50001

], i, j, maxn, minn, t;

intmain()

sort

(a +

1, a + n +

1, cmp)

;sort

(b +

1, b + n +1)

;for

(i = n2; i >=

2; i--

) a[j +1]

= t;

n2 +=1

;}maxn = a[1]

;for

(i = n; i >=

2; i--

) b[j +1]

= t;

n +=1

;}minn = b[1]

;printf

("%lld"

, maxn - minn)

;return0;

}

數列分段

大意:給長度為n的序列,每段有1個值,使其分成最少段數且每段的總和小於m。

思路:可以貪心,盡量將一段值達到最大,但是可能最後乙個數是一段,所以有特殊情況。

**

#include

using

namespace std;

long

long n, m, a[

200000

], i, t, ans;

intmain()

for(i =

0; i < n;

) ans++

; t =0;

} cout << ans;

}

演算法 貪心法

動態規劃在某一步決定優化函式的最大或者最小值時候,需要考慮子問題的優化函式值,從中選出最優的結果。貪心法 也是多不判斷,不考慮子問題的計算結果,根據當時情況採取 只顧眼前的 貪心策略決定取捨,工作量少於動態規劃很多,更具效率 可導致區域性最優化而不是全域性優化 n項活動,使用同乙個禮堂問題 si 和...

演算法 貪心法

感謝華北電力大學王墨玉老師的ppt 基礎知識 應用條件 最優子結構性質 原問題包含了其子問題的最優解 對於乙個問題可能會有不同的量度標準,選擇其中可以獲得最優解的量度標準是貪心法設計的核心問題 例題活動安排問題 可求得最優解 int greedyselector int s,int f,int a ...

貪心法簡介

1.貪心法的設計思想 例 n項活動,每項活動有開始時間和結束時間,不能同時舉行,設計安排使得被安排的活動數量最多 策略 將活動結束時間從小到大排列,從前向後選擇,只要與前面的活動相容,就將活動選入a include using namespace std int s 100 e 100 d 100 ...