貪心演算法 C

2021-10-02 12:41:02 字數 2563 閱讀 2193

貪心演算法(又稱貪婪演算法)

是指,在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的是在某種意義上的區域性最優解。

貪心演算法並不保證會得到最優解,但是在某些問題上貪心演算法的解就是最優解。要會判斷乙個問題能否用貪心演算法來計算。

第乙個問題 找零

假設商店老闆需要找零n元錢,錢幣的面額有:100元、50元、20元、5元、1元,如何找零使得所需錢幣的數量最少? 

public void changemoney(int n)

;//面值

int change = new int ;//計數

for (int i = 0; i < money.length; i++)

printarry(change,"");

}

測試一下345 

沒問題 

第二個問題 分數揹包

乙個小偷在某個商店發現有n個商品,第i個商品價值vi元,重wi千克。他希望拿走的價值盡量高,但他的揹包最多只能容納w千克的東西。他應該拿走哪些商品?(每種商品只有乙個)

0-1揹包:對於乙個商品,小偷要麼把它完整拿走,要麼留下。不能只拿走一部分(商品為金條)

分數揹包:對於乙個商品,小偷可以拿走其中任意一部分。(商品為金砂) 

舉個栗子

商品1:v1=60 w1=10

商品2:v2=100 w2=20 

商品3:v3=120 w3=30 

揹包容量:w=50 

那麼對於0-1揹包很明顯不適合貪心演算法,因為有可以揹包裝不滿,不一定就是最優解

對於分數揹包,肯定能裝滿,就可以用貪心演算法

//分數揹包

public void backpack(float w=50f)

;//分數揹包,怎麼拿,肯定先拿單位價值最高的啊,拿到裝滿或者沒有為止

array.sort(goods);//先降序排列一下下

float indexary = new float ;//計數

for (int i = 0; i < goods.length; i++)

else

}printarry(indexary,"");

}

商品(good)類就不貼出來了,不難,不過記得要繼承icomparable,不然沒法用內建的陣列排序

測試一下 

沒問題 

to be continued~~ 

第三個問題 數字拼接

有n個非負整數,將其按照字串拼接的方式拼接為乙個整數。如何拼接可以使得得到的整數最大?

例:32,94,128,1286,6,71 可以拼接的最大整數為94716321286128

貪心演算法怎麼解決,不是什麼很高階的思路,比如128,1286怎麼拼,你比一下128+1286和1286+128不就完事了 

所以直接把這n個整數挨個比一下,排個序,再一起輸出不就好了

//數字拼接

public void numjoin(int numary)

array.sort(snumary);//降序排序

stringbuilder s = new stringbuilder();//輸出拼接的數字

foreach (num item in snumary)

debug.log(s);

}

num類繼承 icomparable,自定義一下比較的規則就好了,你也可以自己寫排序演算法,冒泡就很適合

測試一哈 

問題幾來著,活動選擇問題

假設有n個活動,這些活動要占用同一片場地,而場地在某時刻只能供乙個活動使用。

每個活動都有乙個開始時間si和結束時間fi,(題目中時間以整數表示),表示活動在[s,f)區間占用場地。

問:安排哪些活動能夠使該場地舉辦的活動的個數最多?

//活動選擇

public void activityplane()

;array.sort(activities);//公升序

listreslist = new list();

reslist.add(activities[0]);//第乙個活動肯定是最先結束的活動

for (int i = 1; i < activities.length; i++)

}foreach (activity item in reslist)

}

測試一哈 

有點累了,讓我康康,有麼有番更新了,批里批里啟動!

C 初學記錄(貪心演算法 結構體 貪心演算法)

貪心演算法 結構體 problem description 今年暑假不ac?是的。那你幹什麼呢?看世界盃呀,笨蛋!確實如此,世界盃來了,球迷的節日也來了,估計很多acmer也會拋開電腦,奔向電視了。作為球迷,一定想看盡量多的完整的比賽,當然,作為新時代的好青年,你一定還會看一些其它的節目,比如新聞聯...

貪心演算法 C 描述

include include using namespace std const int n 1000005 double w n int main sort w,w n double temp 0.0 int ans 0 for int i 0 i n i cout 能裝入的古董最大數為ans ...

經典貪心演算法 貪心演算法概述

貪心演算法具有最優子問題結構,它的特點是 短視 每次選擇對當前局面最有利的決策,來一步步獲得最優解。我個人認為,貪心不是乙個具體的方法,而是一類方法,貪心演算法的關鍵不在於想到,而在於正確性的證明。要證明乙個貪心演算法是正確的,需要證明我們可以把乙個最優解逐步轉化為我們用貪心演算法所得到的解,而解不...