POJ 2506 高精度+递推+记忆化搜索
2013-03-14 16:03
225 查看
根据编程之美上讲的瓷砖覆盖地板问题,可得f(n)=2*f(n-2)+f(n-1),如果不使用记忆化搜索的话,计算f(n)的时候的时间复杂度是指数级别的,因为每次都需要重复计算,修改后的时间复杂度是O(n)。不明白为什么f(0)=1。
//11348277 c00h00g 2506 Accepted 728K 16MS G++ 869B 2013-03-14 16:05:34 #include<iostream> #include<string> #include<stdio.h> using namespace std; int n; string map[305]; string sum(string s1,string s2) { if(s1.length()<s2.length()) { string temp=s1; s1=s2; s2=temp; } int i,j; for(i=s1.length()-1,j=s2.length()-1;i>=0;i--,j--) { s1[i]=char(s1[i]+(j>=0?s2[j]-'0':0)); //注意细节 if(s1[i]-'0'>=10) { s1[i]=char((s1[i]-'0')%10+'0'); if(i) s1[i-1]++; else s1='1'+s1; } } return s1; } string f(int n){ if(map !="") return map ; if(n==1) return map ="1"; else if(n==2) return map ="3"; else return map =sum(sum(f(n-1),f(n-2)),f(n-2)); } int main(){ for(int i=0;i<305;i++) map[i]=""; while(scanf("%d",&n)!=EOF){ if(n==0) cout<<"1"<<endl; else cout<<f(n)<<endl; } //system("pause"); return 0; }
相关文章推荐
- POJ2506——Tiling(高精度+递推)
- poj 2506-递推+高精度
- POJ 2506 Tiling 高精度
- POJ - 2506 Tiling (递推+高精度运算)@
- 【POJ】2506 - Tiling(递推,高精度)
- POJ 2506 Tiling (递推+高精度)
- POJ 2506 Tiling 高精度
- Tiling(POJ 2506 高精度)
- POJ 2506 高精度+递推
- POJ2506 高精度+递推
- poj 2506 Tiling 高精度
- poj 2506 Tiling(数学:递推+高精度)
- POJ 2506 Tiling(高精度+递推)
- POJ 2506 递归 + 高精度
- POJ 2506 Tiling(递归+高精度)
- Poj 2506 Tiling (Java高精度 + 递推)
- [AC自动机+dp+高精度] poj 1625 Censored!
- Censored! - POJ 1625(ac自动机+简单dp+高精度运算)
- POJ1001 高精度浮点幂运算
- POJ 1001 (坑爹的小数高精度乘法)