桂電第一次程式設計 B 大數,DP

2021-08-14 01:10:30 字數 1284 閱讀 3598

problem 1195 # 疊高高

ediszhao新增於2017-12-22 14:54:45

時間限制 : 1000ms 記憶體限制 : 65536kb

×提示 : 你已解決此題目。

問題描述

有一座高度為n(n<10000)的牆,給你兩種不同磚頭:一種高度為1,另一種高度為2,數目不限。要將這個高度為n的牆疊好,一共有多少種不同的疊法。

輸入 只有乙個數n,代表牆的高度。

輸出 輸出乙個結果表示不同的磚頭疊放方法的數值。

輸入範例

1輸出範例

1表面dp題目。其實就是考大數的。疊磚頭就是在n-1上只能放1塊。n-2上放一塊。

dp[n]=dp[n-1]+dp[n-2];

然後求出初值。進行大數。不過這樣來開其實是有簡便演算法的。用乘法,就別用加法了。推到如下:

f3=f2+f1;

f4=f3+f2=2*f2+f1;

f5=f4+f3=3*f2+2*f1;

f6=f5+f4=5*f2+3*f1

f2的係數就是 1 2 3 5 8 ………..

f1的係數就是 1 1 2 3 5……….

因為這個係數是不會超的(沒試過,感覺應該是這樣的)。所以係數不需要大數。

然後再合起來的時候用大數就行了。

#include

#define max(a,b) a>b?a:b

#define min(a,b) ausing

namespace

std ;

typedef

long

long ll;

typedef

unsigned

long

long ull;

const

int max = 10050;

ll dp[max];

string add(string s1,string s2)

for(int i = 0 ; i < len+1 ; i++)

s[i]+=arr[i];

reverse(s.begin(),s.end());

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

}return s;

}int main()

if(n==0) cout

<<"0"

if(n==1) cout

if(n==2) cout

cout

<}

}

第一次電面

昨天經歷了人生第一次 面試,感覺收穫還是很多的。從頭說起。電面的前一天,面試官打來 確認電面時間,還強調那個時間沒空的話可以調整,很人性化。接過 後,開始準備。橫豎只有一天,也準備不了什麼,上網搜所謂電面必問的問題,準備了個人介紹和專案經歷的介紹,結果都沒怎麼派上用場.電面前乙個多小時就在宿舍裡等待...

第一次程式設計

2014年2月25號我上了第一節c語言課,一眼望去,密密麻麻的除了字母就是符號,乙個字 暈!倆字 很暈!三個字 非常暈!還沒有課本,不過還好,班主任在上面操作一次,然後給我們時間自己聯絡,不會的就隨時問了,而且傍邊有同學,可以問問他們,記得編的第乙個程式是出來一句話,第二個是弄出來乙個心形,學習了一...

第一次正式程式設計

專案組裡待了乙個星期,也沒什麼事幹。專案組裡人都去日本出差了,剩我和小梁兩個人。隨便看看 吧。操,編譯不過去。問小梁,他也不知道,他也新來沒多久,怪不得出差沒帶他。一星期後,大家都回來了。終於有了第乙個任務,續寫老韓寫的xml解析程式。這程式是老韓搭建的架構,小魏寫的 寫得差不多了,我接著他的工作繼...