這一周學習了貪心演算法。
總的來說,貪心演算法在聽的時候感覺並沒有這麼的難,總體思路就是在每一步取最優解,之後總的就取到最優解。
但在寫的時候感覺並沒有這麼簡單,因為在貪心演算法來說,思路首先是是最重要的,之後才會考慮優化**。
本週貪心演算法的第一題,我寫了三天之後才有大概的方向。
第一次的的總思路用到了棧,因為二進位制需要倒序輸出,而棧符合filo的規則。但是發現,如果用這種方法,我最終還要設定其他陣列,但如此的話我感覺屬於得不償失。會增加複雜量。第二天的時候,我又想到了,在原有二進位制基礎上,不斷的讓最後的1前移,然後後面的所有1排在後面,之後我嘗試了for迴圈,但如此過程的對我來說實在太過於複雜,我除錯了一天也沒有除錯思路。第三天我有想到了本可以不管這個,只需要考慮1的個數是否相同就可以,於是我寫了個函式用於計算乙個數的乙個數,在%2後如果等於1就個數加一。然後判斷1的個數即刻。
#include
using
namespace std;
intf
(int x)
return n ;
}int
main()
else
m++;}
}}return0;
}
第二題
整體來說就較為簡單,就是找出價效比最高的
即為單位質量小的貴,因為乙個物品包含兩個資料所以最好的就是用struct函式,前期我只定義了幾個陣列發現不好寫,因為無法排序。
之後可用sort語句排序,排序過程中我只寫了價效比高的向前排,之後我發現如果價效比相同,可以把質量多的放前面,優化排序。但是始終輸出不了正確資料。我之後發現我的錯誤就是資料的型別定義有錯誤,並且沒有利用最後一點空間。而且之後的for迴圈中break語句的使用也很重要,否則會過多的迴圈,出現錯誤。而且也無視了資料歸零的重要性。
#include
#include
#include
using
namespace std;
struct jinyin
;double
cmp(jinyin a,jinyin b)
;int
main()
sort
(m,m+s,cmp)
;for
(int j=
0; j)else
} cout
)<}}
本週用大量時間才寫出幾個程式,效率較低。 貪心習題小總結
不要怪筆者寫的簡陋,真的沒有太多時間和精力來整理了。要使用貪心演算法就要證明,貪心策略可以得到全域性最優解,因此它並沒有動態規劃應用那麼廣泛,但是一旦證明貪心策略的重要性往往可以用o n 的複雜度解決問題。455.分發餅乾 貪心策略 我們先對餅乾和孩子排序,拿最小的餅乾去滿足胃口最小的孩子。clas...
基礎貪心演算法小總結
按照右端點排序,然後模擬,期間記錄乙個last變數 include using namespace std const int n 1e5 typedef pair int,int pll pll a n int n intmain sort a,a n int last 1e9 cnt 0 for...
小總結 快速冪 貪心 Bit Mask
傳送門 preview bitstream a flow of data in binary form.in bit wise expression 用位表示。her face was a cold blank mask.她裝出一副冰冷冷毫無表情的樣子。perform a bit wise and ...