XTU1161 骨牌(1*2的骨牌铺N*3的地板)

该博客探讨了如何用1*2的骨牌来铺满n*3的地板,强调了只有n为偶数时才能铺满,并提出递推公式f(n)=4*f(n-2)-f(n-4),其中f(2)=3,以此解决不同铺法计数的问题。博主提供了实现这一递推式的AC代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述

现在用1*2的骨牌,去铺n*3的地板,骨牌可以竖着和横着放,但不能重叠,请问铺满地板一共有多少种不同的铺法? 

输入
每行输入一个整数n,(1≤n≤1,000),如果n为0表示样例输入结束,这个样例不用处理。由于结果可能很大,所以需要将结果对100,003取模。 
输出
每行输出一个样例的结果。 
样例输入
1
2
3
4
1000
0
样例输出
0
3
0
11

74979

解题思路

递推解决,首先可以明确的是,要想铺满地板,必须满足n*3%(2*1)=0,即n必须为偶数

对于偶数长度,如2,4,有以下几种铺法:

### XTU Online Judge P^2Q Problem Solution #### 问题描述 给定两个整数 \( p \) 和 \( q \),计算满足条件的正整数对 \( (a, b) \) 的数量,使得 \( a^p + b^q = c^{pq} \),其中 \( c \) 是任意正整数。 #### 解决方法 为了求解这个问题,可以采用枚举的方法来遍历可能的 \( a \) 和 \( b \) 值,并验证它们是否满足方程 \( a^p + b^q = c^{pq} \)[^1]。具体来说: 对于每一个可能的 \( a \) 和 \( b \),先计算左侧表达式的值 \( S=a^p+b^q \),再判断该值能否表示成某个正整数 \( c \) 的 \( pq \) 次幂的形式。如果能,则找到一组符合条件的 \( (a,b,c) \);否则继续尝试其他组合直到完成所有可能性的检验为止。 由于直接暴力搜索效率较低,因此可以通过预处理一些常用的指数运算结果表来加速匹配过程,减少不必要的重复计算开销。 另外值得注意的是边界条件以及数据范围的影响,在实际编程实现时需特别留意防止溢出等问题的发生。 ```cpp #include <iostream> #include <cmath> using namespace std; bool check(long long s, int exp){ double root=pow(s,1.0/exp); return floor(root)==ceil(root); // 判断s是否为exp次方根的完全平方数 } int main(){ int p,q; cin>>p>>q; const int MAXN=1e5; // 根据题目给出的数据规模调整此上限 long long count=0; for(int i=1;i<=MAXN;++i){ for(int j=1;j<=MAXN;++j){ long long sum=powl(i,p)+powl(j,q); if(check(sum,p*q)){ ++count; } } } cout<<count<<"\n"; } ```
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值