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解析程式。這程式是老韓搭建的架構,小魏寫的 寫得差不多了,我接著他的工作繼...