本科团队例会分享1 多米诺与托米诺平铺问题 c语言
多米諾與托米諾平鋪
- 題目
- 題目來源
- 題目描述
- 我的解法與講解(動態(tài)規(guī)劃)
- 二維數(shù)組解
- 優(yōu)化
- 空間優(yōu)化
- 最優(yōu)解
題目
題目來源
leetcode第790題.
題目描述
有兩種形狀的瓷磚:一種是 2 x 1 的多米諾形,另一種是形如 “L” 的托米諾形。兩種形狀都可以旋轉。
給定整數(shù) n ,返回可以平鋪 2 x n 的面板的方法的數(shù)量。返回對 10^9 + 7 取模 的值。平鋪指的是每個正方形都必須有瓷磚覆蓋。兩個平鋪不同,當且僅當面板上有四個方向上的相鄰單元中的兩個,使得恰好有一個平鋪有一個瓷磚占據(jù)兩個正方形。
我的解法與講解(動態(tài)規(guī)劃)
二維數(shù)組解
dp[i][4] 代表的是第i列的狀態(tài),dp[i][0]代表這一列上下都沒有被鋪,1代表上面一塊沒有沒鋪,2代表下面一塊沒有被鋪,3代表上下全被鋪滿。
dp[i]的狀態(tài)只與dp[i-1]的狀態(tài)有關
0->0與3->3會多考慮一種,所以要去掉其中之一。據(jù)此可做出轉移方程
優(yōu)化
空間優(yōu)化
c語言好像不能直接拷貝數(shù)組,其它語言可用兩個一維數(shù)組替代二維數(shù)組,一個數(shù)組存儲
最優(yōu)解
dp[i]代表0到i列鋪滿的方法數(shù)量。
遞推:0 ~ n-1列鋪好,加個多米諾推到n;0 ~ n-2列鋪好,就是n-1沒鋪好,不能是兩個豎著的多米諾,只能是兩個橫著的多米諾。我們在通過dp(i)平鋪dp(n)時,i+1~n-1列不能有完成拼好的,否則就重復計算了。
0 ~ n-3列鋪好推到n,說明倒數(shù)三列狀態(tài)都不能是3。就是兩個L型的托米諾,
dp(n-4) 兩個托米諾夾一個多米諾
dp(n-5) 兩個托米諾夾兩個多米諾
…….
托米諾是能倒過來的,所以有托米諾的就會有兩種情況。
由此推出公式dp(n) = dp(n-1) + dp(n-2)+2*(dp(n-3)+dp(n-4)+dp(n-5)……dp(1));
得到dp(n-1)=dp(n-2)+dp(n-3)+2*(dp(n-4)+dp(n-5)+……dp(1));
將兩式相減得到dp(n)=2*dp(n-1)+dp(n-3);
總結
以上是生活随笔為你收集整理的本科团队例会分享1 多米诺与托米诺平铺问题 c语言的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 河南省2018计算机类专业答案,2018
- 下一篇: 【GD32F303】星空派介绍