貪心基礎 Assign Cookies

2021-10-01 23:58:09 字數 1549 閱讀 3771

一、貪心基礎 assign cookies

假設你是一位很棒的家長,想要給你的孩子們一些小餅乾。但是,每個孩子最多只能給一塊餅乾。對每個孩子 i ,都有乙個胃口值 g(i) ,這是能讓孩子們滿足胃口的餅乾的最小尺寸;並且每塊餅乾 j ,都有乙個尺寸 s(j) 。如果 s(j) >= g(i) ,我們可以將這個餅乾 j 分配給孩子 i ,這個孩子會得到滿足。你的目標是盡可能滿足越多數量的孩子,並輸出這個最大數值。

注意:你可以假設胃口值為正。

乙個小朋友最多只能擁有一塊餅乾。

示例 1:

輸入: [1,2,3], [1,1]

輸出: 1

解釋: 

你有三個孩子和兩塊小餅乾,3個孩子的胃口值分別是:1,2,3。

雖然你有兩塊小餅乾,由於他們的尺寸都是1,你只能讓胃口值是1的孩子滿足。

所以你應該輸出1。

示例 2:

輸入: [1,2], [1,2,3]

輸出: 2

解釋: 

你有兩個孩子和三塊小餅乾,2個孩子的胃口值分別是1,2。

你擁有的餅乾數量和尺寸都足以讓所有孩子滿足。

所以你應該輸出2.

解決思路

先把餅乾按大小排序, 小朋友按胃口大小排序

如果最大的餅乾能滿足胃口最大的小朋友, 就把最大的餅乾給他,

否則就把最大的餅乾給胃口第二大的小朋友....以此類推

**#include

#include

#include

using namespace std;

/// 455. assign cookies

/// 

/// 貪心演算法

/// 時間複雜度: o(n)

/// 空間複雜度: o(n)

class solution

return intervals.size() - res;}};

三. 貪心選擇性質的證明

一般過程如下:

假設貪心演算法為a 不是最優解,

則存在乙個最優演算法o

只要證明a完全可以代替o,且不影響求出最優解 即可

上一節中貪心選擇性質的證明

題目: 給定一組區間, 問最多保留多少個區間, 可以讓這些區間之間相互不重疊。

貪心演算法: 按照區間的結尾排序, 每次選擇結尾最早的, 且和前乙個區間不重疊的區間

反證法證明:

貪心演算法的 某次選擇的是[s(i), f(i)] 這個區間; 其中f(i)是當前所有選擇中結尾最早的

假設這個選擇不是最優解。 也就是說, 如果這個問題的最優解為k, 則這個問題得到的解, 最多為k-1

假設最優解在這一步選擇的是[s(j), f(j)], f(j)>f(i)

顯然 可以將[s(i),f(i)]替換[s(j),f(j)],  而不影響後序的區間選擇:

f(j)>f(i)  顯然不會影響後面選擇

而s(i)和s(i), 則隱藏在條件中: 

前面的m次選擇是一樣的, 到這一次 使用'貪心選擇'還是 '最優選擇', 都不會對全面已經選擇過的區間  產生影響了

--------------------- 

演算法基礎 貪心策略

本文主要作為自己的學習筆記,並不具備過多的指導意義。概述 貪心演算法通常用來求解最優問題 由區域性最優解到整體最優解 通過不斷對區域性最優進行操作,最終達到整體最優 無後效性 後序操作,不會出現資料狀態的回滾 和dp 動態規劃 之間的聯絡 很多貪心問題可以通過dp進行求解 最優裝載問題 給出n個物體...

演算法基礎 貪心演算法

貪心演算法是常見的基礎演算法,它在求解問題時總想用當前看來最好的方法去實現,而到了下一步,再用下一步時最好的方法來解決,因此有了貪心的名字。此方法不從整體去考慮,僅是在某種意義上的區域性最優求解。雖然貪心演算法不是對所有的問題都能得到整體最優解,但是面對範圍相當廣泛的很多問題時,能產生整體最優解或是...

三值排序(貪心基礎)

寫乙個程式計算出,計算出的乙個包括1 2 3三種值的數字序列,排成公升序所需的最少交換次數。輸入第1行為類別的數量n 1 n 1000 輸入第2行到第n 1行,每行包括乙個數字 1或2或3 輸出包含一行,為排成公升序所需的最少交換次數。922 1333 231 樣例輸出4 思路 統計1,2,3的個數...