YbtOJ 遞推演算法課堂過關 例5 平鋪方案【遞推(簡單DP)】
思路
首先讀題可得設
f
[
i
]
f[i]
f[i] 表示
2
∗
i
2*i
2∗i 時的方案數。
因為邊最長是2,所以考慮從
f
[
i
−
1
]
f[i-1]
f[i−1] 和
f
[
i
−
2
]
f[i-2]
f[i−2] 轉移。
i
−
2
i-2
i−2 時的情況:
i
−
1
i-1
i−1 時只有可能有一條豎著的,所以直接繼承
f
[
i
−
1
]
f[i-1]
f[i−1]。
當然此時存在了重複,
i
−
2
i-2
i−2 的兩條豎著的情況和
i
−
1
i-1
i−1 的情況發生了衝突,
所以直接把
i
−
2
i-2
i−2 的情況剔除即可。
需要高精度。
C o d e Code Code
#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
long long f[300][101];
int n,m;
void gjc(int x)
{
int jw=0;
for(int i=1; i<=f[x-2][0]+1; i++)
{
f[x][i]=(f[x-2][i]*2)%10+jw;
jw=(f[x-2][i]*2)/10;
}
if(f[x][f[x-2][0]+1]!=0)
f[x][0]=f[x-2][0]+1;
else
f[x][0]=f[x-2][0];
}
void gjj(int x)
{
int jw=0;
for(int i=1; i<=f[x][0]+1; i++)
{
int g=(f[x][i]+f[x-1][i]+jw);
f[x][i]=g%10;
jw=g/10;
}
if(f[x][f[x][0]+1]!=0)
f[x][0]=f[x-1][0]+1;
}
int main()
{
f[1][1]=1,f[2][1]=3,f[1][0]=1,f[2][0]=1;
for(int i=3; i<=250; i++)
{
gjc(i);
gjj(i);
}
//f[i]=f[i-2]*2+f[i-1];
while(cin>>n)
{
int i=f[n][0];
while(f[n][i]==0)
i--;
for(int i=f[n][0]; i>=1; i--)
cout<<f[n][i];
cout<<endl;
}
return 0;
}
相關文章
- 遞推演算法與遞推套路(手撕演算法篇)演算法
- 遞推演算法與遞推套路(演算法基礎篇)演算法
- 遞推演算法,AI衍生演算法AI
- c++ 遞推演算法C++演算法
- 【YbtOJ高效進階 遞推-2】奇怪漢諾塔
- 動態dp & 矩陣加速遞推矩陣
- 簡單的java遞迴演算法Java遞迴演算法
- “大整數階乖”問題的遞推演算法演算法
- ACM(遞迴遞推—A)ACM遞迴
- 演算法分析__遞推方程演算法
- “斐波那契數列”問題的遞推演算法演算法
- ACM(遞迴遞推—I)ACM遞迴
- 微課|中學生可以這樣學Python(8.3節):遞推演算法例題講解Python演算法
- 遞迴和遞推總結遞迴
- arguments.callee實現遞迴簡單程式碼例項遞迴
- .net頁面間的引數傳遞簡單例項單例
- 遞迴的簡單應用遞迴
- openjudge1768 最大子矩陣[二維字首和or遞推|DP]矩陣
- 快遞鳥查詢訂單例項單例
- JavaScript之遞迴的簡單使用JavaScript遞迴
- javascript遞迴概念簡單介紹JavaScript遞迴
- 簡單的加減乘除(遞迴)遞迴
- 第?課——基於矩陣快速冪的遞推解法矩陣
- 雲課堂 Python學習簡單示例Python
- 簡單快遞系統 java實現Java
- 尾遞迴(tail recursion) 的簡單使用遞迴AI
- js函式引數值傳遞和引用傳遞簡單介紹JS函式
- 1.遞推式
- 10-17 c遞迴與遞推初識遞迴
- 技術傳遞溫度,HMS Core手語服務走進暖心課堂
- 深度學習小課堂:如何利用遞迴神經網路生成文字?深度學習遞迴神經網路
- Python演算法:推導、遞迴和規約Python演算法遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 遞迴演算法遞迴演算法
- 單連結串列逆置遞迴演算法遞迴演算法
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 遞迴演算法轉換為非遞迴演算法的技巧遞迴演算法
- 例2.4 使用列表推導式實現巢狀列表的平鋪巢狀