2019.1.29 自主訓練日誌

      訓練第九天,今天瞭解了貪心算法,百度了一下算法分析的內容。除去一些簡單題目,把臺階的進階題目解決了。
      先說一下貪心算法(目前理解的程度),和它的名字一樣,貪心算法是"短視"的,只顧眼前的利益,不考慮整體最優。假設每一步選擇都是不可逆的,每一步選擇之後都有多個選擇,而我們要做的就是選擇當前利益最高的那個選項,直到達到最終目的,然後再回頭看對於整體是否趨於最優。貪心算法可以說是最簡單的一種思路,用每一步的最優趨近整體最優,而在很多情況下貪心是正確的。
      在自學貪心算法的過程中瞭解了什麼是"樹"——單向連接沒有迴路的點集,樹的最直觀形象就是生物學上的樹,但理解的時候不可侷限於此。還有算法複雜度的問題,時間複雜度其實就是算法執行每一步所需時間的總和,並沒有想象中的難理解(눈_눈),空間複雜度有關存儲空間的知識,看着有點懵。
      最後說一下今天做的題目

小瓜想走上一個一共有n級的臺階,由於小瓜的腿長比較特殊,他一次只能向上走1級或者3級或者5級臺階。小瓜想知道他有多少種方法走上這n級臺階,你能幫幫他嗎?
輸入
一行一個整數n(n<=100000),表示一共有n級臺階。
輸出
一行一個整數,表示小瓜上臺階的方案數對100003取餘的結果。
輸入樣例
3
輸出樣例
2
區別於上一題,這次小瓜同學能跳1 3 5三種不同的臺階了。多算幾次就可以發現其中的規律,n階臺階可以分成1 3 5不同的三部分,一種類似於斐波那契數列的數列。代碼實現如下
#include
using namespace std;
long long int a[100003];
int main()
{
long long int n,i;
cin>>n;
a[n] = 1;
for(i = n;i>=1;i–)
{
a[i-1] = (a[i-1]+a[i])%100003;
a[i-3] = (a[i-3]+a[i])%100003;
a[i-5] = (a[i-5]+a[i])%100003;
}
cout<<a[0];
}
明天繼續看貪心算法的例題,然後將51nod用到貪心算法的題目做幾道,爭取掌握使用貪心算法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章