日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

算法题目——多米诺骨牌问题(POJ-2663)

發布時間:2023/12/4 编程问答 46 豆豆
生活随笔 收集整理的這篇文章主要介紹了 算法题目——多米诺骨牌问题(POJ-2663) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目鏈接:POJ-2663
設有形狀一樣的多米諾牌,每張牌恰好覆蓋棋盤上相鄰的兩個方格,即一張多米諾牌是一張 1 行 2 列或者 2 行 1 列的牌。那么,是否能夠把 32 張多米諾牌擺放到棋盤上,使得任何兩張多米諾牌均不重疊,每張多米諾牌覆蓋兩個方格,并且棋盤上所有的方格都被覆蓋住?我們把這樣一種排列稱為棋盤被多米諾牌完美覆蓋。這是一個簡單的排列問題,同學們能夠很快構造出許多不同的完美覆蓋。但是,計算不同的完美覆蓋的總數就不是一件容易的事情了。不過,同學們 發揮自己的聰明才智,還是有可能做到的。

輸入

一次輸入可能包含多行,每一行分別給出不同的 n 值 ( 即 3 乘 n 棋盤的列數 )。當輸入 -1 的時候結束。
n 的值最大不超過 30.
輸出

針對每一行的 n 值,輸出 3 乘 n 棋盤的不同的完美覆蓋的總數。

思路:
設a[i]為N=i時的方法數.i為奇數的時候肯定為0.

如果i為偶數,a[i]可以看成a[i-2]加上兩個單位組成的,此時多出來的2單位有3種方法…

也可以看成a[i-4]加上四個單位組成的,此時這四個單位一定是連在一起的,中間不能分割,所以只有兩種放法.

同理,可看成a[i-6]加上六個單位組成的,此時這六個單位也連在一起,不能分割,只有兩種放法…

直到所有的磚塊都是連在一起的,中間不能分割,也只有兩種放法.

所以
a[i]=3a[i-2]+2(a[i-4]+a[i-6]+…+a[0]) ①

a[i-2]=3a[i-4]+2(a[i-6]+…a[0]) ②

①-②,得a[i]=4*a[i-2]-a[i-4].
參考文章
POJ 2663 Tri Tiling(完美覆蓋)

#include <stdio.h> #include <stdlib.h> #include <iostream> #include<vector> using namespace std;int main() {int i,n;long long int a[31];a[0]=1;a[2]=3;for(i=4;i<=30;i+=2){a[i]=4*a[i-2]-a[i-4];}vector<int> vec;while(scanf("%d",&n)&&n!=-1){if(n%2==1){vec.push_back(0);continue;}elsevec.push_back(a[n]);}for(int i=0;i<vec.size();i++){printf("%I64d\n",vec[i]);}return 0; }

總結

以上是生活随笔為你收集整理的算法题目——多米诺骨牌问题(POJ-2663)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。