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 & 矩陣加速遞推矩陣
- 演算法分析__遞推方程演算法
- 微課|中學生可以這樣學Python(8.3節):遞推演算法例題講解Python演算法
- 遞推-*馬攔過河卒
- 遞迴和遞推總結遞迴
- 快遞鳥查詢訂單例項單例
- 簡單的加減乘除(遞迴)遞迴
- JavaScript之遞迴的簡單使用JavaScript遞迴
- 遞推,遞迴,貪心,列舉思想遞迴
- 遞推--街區
- 第?課——基於矩陣快速冪的遞推解法矩陣
- 簡單快遞系統 java實現Java
- 杭電2048(遞推)
- 遞推--找數字
- 1.遞推式
- 10-17 c遞迴與遞推初識遞迴
- 二分法的簡單實現——-遞迴和非遞迴遞迴
- 深度學習小課堂:如何利用遞迴神經網路生成文字?深度學習遞迴神經網路
- 回顧二分與bfs(或者說是遞推)和簡單模擬
- 遞迴演算法遞迴演算法
- 【新特性速遞】平鋪數字輸入框的觸發圖示(NumberBoxTriggerType)
- 技術傳遞溫度,HMS Core手語服務走進暖心課堂
- 演算法小專欄:遞迴與尾遞迴演算法遞迴
- 例2.4 使用列表推導式實現巢狀列表的平鋪巢狀
- 簡單C#遞迴(向前查詢上工序)C#遞迴
- Python3之遞迴函式簡單示例Python遞迴函式
- Python技法:實現簡單的遞迴下降ParserPython遞迴
- 【演算法】遞迴演算法演算法遞迴
- 遞迴函式例項大全遞迴函式
- 遞迴中Return例項分析遞迴
- Java遞迴演算法Java遞迴演算法
- 遞迴演算法要素遞迴演算法
- 快速排序(遞迴及非遞迴演算法原始碼)排序遞迴演算法原始碼