UVa 11310 - Delivery Debacle

本文探讨了使用1x1方形及2x2 L形瓷砖铺满nx2地面的方法数量问题,通过动态规划(DP)找到递推公式并实现算法。文章提供了完整的C语言程序代码,展示了如何通过递推公式计算不同长度下的瓷砖铺设方案。

题目:有两种瓷砖,1x1的方形以及2x2的L形,问铺满nx2的地面有多少种方法。

分析:数学题,动态规划(DP)。找到递推公式打表计算查询输出。

            因为宽度为2,所以题目很简单不需要使用搜索+dp求解;

            我们发现如果有L形的瓷砖,只能形成2x2(有4种可能)和2x3(有2种可能)的小块组合;

            没有L形瓷砖直接在右侧加两块1x1的方形瓷砖即可;

            所以可以找到递推公式:f(n)= f(n-1)+ 4 * f(n-2)+ 2 * f(n-3);

说明:(⊙v⊙)。

#include <stdio.h>
#include <stdlib.h>

long long f[45];

int main()
{
	f[0] = 1LL;
	f[1] = 1LL;
	f[2] = 5LL;
	for (int i = 3; i <= 40; ++ i) {
		f[i] = f[i-1] + 4*f[i-2] + 2*f[i-3];
	}
	int t, n;
	while (~scanf("%d",&t))
	while (t --) {
		scanf("%d",&n);
		printf("%lld\n",f[n]);
	}
	
	return 0;
} 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值