检测到 KaTeX 加载失败,可能会导致文中的数学公式无法正常渲染。
#题面
#题目描述
这次小可可想解决的难题和中国象棋有关,在一个 行 列的棋盘上,让你放若干个炮(可以是 个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。你也来和小可可一起锻炼一下思维吧!
#输入格式
一行包含两个整数 ,之间由一个空格隔开。
#输出格式
总共的方案数,由于该值可能很大,只需给出方案数模 的结果。
#输入输出样例
样例输入 #1
1 3
样例输出 #1
7
样例解释 #1
除了 个格子里都塞满了炮以外,其它方案都是可行的,所以一共有 种方案。
#数据范围与提示
- 对于 的数据, 和 均不超过 ;
- 对于 的数据, 和 至少有一个数不超过 ;
- 对于 的数据,。
#思路
显然,一行或者一列上不能放置 个炮。
设 表示在前 行时有 行放了 个炮、 行放了 个炮,则有 行没放炮。
当到达第 行的时候,有以下几种情况:
-
不新增炮,此时有转移方程:
-
新增 个炮。
-
从 个炮增加到 个炮:
-
从 个炮增加到 个炮:
-
-
新增 个炮。
-
一列从 个炮增加到 个炮,一列从 个炮增加到 个炮:
-
两列从 个炮增加到 个炮:
-
两列从 个炮增加到 个炮:
-
直接转移,最后枚举结束点并计算其到车站的距离即可。
#代码
1 |
|