hdu 2190

DP

dp[i][j]表示,第i列,以方式j結束時的情況數。

#include "stdio.h"
#include "string.h"

void main(){
	int c, n, i;
	int dp[31][2];  //方式0,以1*1的地磚結束;方式1,以2*2的地板結束

	memset(dp, 0, sizeof(dp));

	dp[1][0] = 1;
	dp[2][0] = 1;
	dp[2][1] = 2;

	for(i=3; i<=30; i++){
		dp[i][0] = dp[i-1][0] + dp[i-1][1];  //以方式0結束,即第i列全是1*1的地磚,就等於第i-1列的所有情況
		dp[i][1] = (dp[i-2][0] + dp[i-2][1])*2;  //以方式1結束,即第i列和第i-1列有2*2的地磚,就等於第i-2列的所有情況*2,因爲2*2的地磚可以在上面或者下面,兩種情況
	}

	freopen("in.txt", "r", stdin);
	scanf("%d", &c);
	while(c--){
		scanf("%d", &n);
		printf("%d\n", dp[n][0]+dp[n][1]);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章