棋子(又是利用数学头脑的一天)

题2  棋子

【问题描述】

小Z在家闲得无聊,摆弄起了围棋棋子。也许是小Z有自虐倾向,他出了个难题给自己,结果竟然把自己难住了。你作为他的朋友,决定帮助他解决难题。

有一个m×n的棋盘,需要在上面摆满黑白棋子。小Z有一个奇怪的规则:如果有两个棋子相邻(上下左右),且一白一黑,则黑的必须在上面(或左边)。黑白棋子都是足够多的。小Z想知道共有多少种不同的摆法(只要略有不同就算一种)。

【输入】

输入文件chessman.in的共一行,包括2个正整数m和n。

【输出】

输出文件chessman.out共一行,包括一个正整数ans,表示共有多少种不同的摆法。

【输入输出样例】

chessman.in

chessman.out

2 2

6

【输入输出样例解释】

6种摆法分别为:

oo   **   **   *o   **   *o

oo   **   oo   *o   *o   oo

(*表示黑子,o表示白子)

【限制】

50%的数据满足: 2<=m,n<=16

100%的数据满足: 2<=m,n<=30

以下为代码

#include<bits/stdc++.h>
using namespace std;
long long n,m;
long long f[100][100];
int main()
{
	freopen("chessman.in","r",stdin);
	freopen("chessman.out","w",stdout);
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
{
	if(i==1||j==1)f[i][j]=i+j;
}
for(int i=1;i<=100;i++)
for(int j=1;j<=100;j++)
{
	if(i!=1&&j!=1)
	{
		f[i][j]=f[i-1][j]+f[i][j-1];
	}
}
cin>>n>>m;
cout<<f[n][m];


	return 0;
}

(嘘,说实话,这题找找数学规律就好了,杨辉三角,不要要什么高深算法,本人的爱好就是简单化,尽可能地不用子函数或算法)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MOKa君的詟学客栈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值