演算法 03 貪心和分治

2021-07-29 11:27:16 字數 3010 閱讀 5568

場景:海盜來到了召喚師峽谷,然後絲血準備逃生。但是仍然貪圖財寶。現在時間有限,必須要把容量一定的揹包裡裝下最多的財富。

思路:按照價效比把所有寶藏排序。然後按照價效比的順序往包裡裝。

// 包的最大容量

private

int max_weight =

120;

// 每個寶藏的重量

private

int[

] weights =

newint

;// 每個寶藏的價值

private

int[

] values =

newint

;

public

static

void

main

(string[

] args)

/**

* 獲取寶藏的最大價值

*/public

void

getmaxvalue

(int capacity,

int[

] weight,

int[

] values)

// 按照價效比進行排序

for(

int i =

0; i < size; i++)}

}// 按照價效比排序的寶藏的質量和價值

int[

] w =

newint

[size]

;int

v =newint

[size]

;for

(int i =

0; i < size; i++

)//包裡裝的寶藏

list

pacagecontent =

newarraylist

();// 開始遍歷所有的寶藏 如果寶藏的質量比包的容量小 就裝進去

for(

int i =

0; i < size; i++)}

for(

int a : pacagecontent)

}

現在假設有8支隊伍打比賽,那麼假設第一天1和2打,3和4打,5和6打,7和8打。那麼就有如下圖的安排表。一共要打七天會打完。現在要把這個圖分開四個部分來表示。

}}我實在不知道這個演算法該怎麼去描述,總之就是把乙個特殊點用l給包圍起來

}// 填充左下部分

for(

int i = m; i < n; i++)}

// 填充右下部分

for(

int i = m; i < n; i++)}

}}

// 棋盤

private

int[

] board;

// 特殊點的值

int specialdot =0;

public

chessboard

(int specialrow,

int specialcol,

int size)

//列印結果

private

void

print()

}}public

static

void

main

(string[

] args)

/**

* * @param specialrow

* 特殊點的橫座標

* @param specialcol

* 特殊點的縱座標

* @param startrow

* 棋盤起點的橫座標

* @param startcol

* 棋盤起點的縱座標

* @param size

*/private

void

createchessboard

(int specialrow,

int specialcol,

int startrow,

int startcol,

int size)

int half = size /2;

specialdot = specialdot %4+

1;// 如果特殊點在左上方

if(specialrow < startrow+half && specialcol < startcol+half)

else

// 如果特殊點在右上方

if(specialrow < startrow+half && specialcol >= startcol+half)

else

// 如果特殊點在左下方

if(specialrow >= startrow+half && specialcol < startcol+half)

else

// 如果特殊點在右下方

if(specialrow >= startrow+half && specialcol >= startcol+half)

else

}

演算法很美03演算法思想(分治)

分治法 divide and conquer,d c 將原問題劃分成若干個規模較小而結構與原問題一致的子問題 遞迴地解決這些子問題,然後再合併其結果,就得到原問題的解。容易確定執行時間,是分治演算法的優點之一。分治模式在每 層遞迴上都有三個步驟 分解 divide 將原問題分解成一系 列子問題 解決...

經典演算法之動態規劃 分治 和貪心

1 分治 分治 即分而治之 把乙個複雜的問題分成多個相同或相似的子問題,再把子問題分成更小的子問題 直到最後子問題可以簡單的直接求解,原問題的解即子問題的解的合併。適用場景 二分搜尋 歸併排序 快速排序 大整數乘法 第k小元素 最近點對 快速傅利葉變換等。2 動態規劃 動態規劃法也是把問題一層一層地...

leetcode03 貪心演算法

在貪婪演算法 greedy method 中,我們要逐步構造乙個最優解。每一步,我們都在一定的標準下,做出乙個最優決策。做出決策所依據的標準稱為貪心準則 greedy criterion 貪心演算法是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是...