poj 2506 Tiling(数学:递推+高精度)
2014-08-23 21:32
302 查看
很坑的一道高精度模板题
用dp
保存2×n对应结果
对于2×n的矩形,分析最后两列
如果最后一列放1×2,则对应dp[n-1]种放法
如果最后两列放2×1,则对应dp[n-2]种放法
如果最后两列放2×2,则对应dp[n-2]种放法
所以dp
= dp[n-1]+dp[n-2]+dp[n-2]
比斐波那契增长的还快,所以要用高精度或者java大数
代码如下:
用dp
保存2×n对应结果
对于2×n的矩形,分析最后两列
如果最后一列放1×2,则对应dp[n-1]种放法
如果最后两列放2×1,则对应dp[n-2]种放法
如果最后两列放2×2,则对应dp[n-2]种放法
所以dp
= dp[n-1]+dp[n-2]+dp[n-2]
比斐波那契增长的还快,所以要用高精度或者java大数
代码如下:
#include <cmath> #include <cstdio> #include <iostream> #include <cstring> #include <algorithm> #define MAXN 250 #define esp 1e-9 using namespace std; const int Base=1000000000; const int Capacity=100; typedef long long huge; struct BigInt{ int Len; int Data[Capacity]; BigInt() : Len(0) {} BigInt (const BigInt &V) : Len(V.Len) { memcpy (Data, V.Data, Len*sizeof*Data);} BigInt(int V) : Len(0) {for(;V>0;V/=Base) Data[Len++]=V%Base;} BigInt &operator=(const BigInt &V) {Len=V.Len; memcpy(Data, V.Data, Len*sizeof*Data); return *this;} int &operator[] (int Index) {return Data[Index];} int operator[] (int Index) const {return Data[Index];} }; BigInt operator+(const BigInt &A,const BigInt &B){ int i,Carry(0); BigInt R; for(i=0;i<A.Len||i<B.Len||Carry>0;i++){ if(i<A.Len) Carry+=A[i]; if(i<B.Len) Carry+=B[i]; R[i]=Carry%Base; Carry/=Base; } R.Len=i; return R; } ostream &operator<<(ostream &Out,const BigInt &V){ int i; Out<<(V.Len==0 ? 0:V[V.Len-1]); for(i=V.Len-2;i>=0;i--) for(int j=Base/10;j>0;j/=10) Out<<V[i]/j%10; return Out; } BigInt dp[MAXN]; int main(void) { dp[0] = dp[1] = 1.0; for(int i=2; i<=MAXN; ++i) { dp[i] = (dp[i-1]+dp[i-2]+dp[i-2]); } int n; while(scanf("%d", &n) != EOF) { cout << dp << endl; } return 0; }
相关文章推荐
- POJ - 2506 Tiling (递推+高精度运算)@
- 【POJ】2506 - Tiling(递推,高精度)
- POJ 2506 Tiling (递推+高精度)
- Poj 2506 Tiling (Java高精度 + 递推)
- POJ2506——Tiling(高精度+递推)
- POJ 2506 Tiling(高精度+递推)
- POJ 2506 高精度+递推
- poj 2506 Tiling 高精度
- poj 2506 Tiling 《大数加法+递推》
- POJ 2506 Tiling (递推 + 大数加法模拟 )
- poj 2506 Tiling 【大数加递推】
- POJ 2506 Tiling(递推+大整数加法)
- poj 2506 Tiling 递推
- POJ 2506 Tiling (大数+递推)
- poj 2506-递推+高精度
- poj 2506 Tiling【大数+递推】
- POJ 2506 Tiling(递归+高精度)
- [POJ](2506)Tiling ---递推+Java大数
- poj 2506 Tiling(递推 大数)
- POJ2506 高精度+递推