P2051中国象棋
题目链接:戳这里
题目大意:
前置知识:
(不会请自行百度)
比如说基本的排列组合公式和加法乘法原理
开始正文:
首先要找到本题的状态:
本题只有一个限制条件:那就是每一个 行 和 列 最多放 两个 炮
那就可以考虑状态要把一个 行 或 列 放了 多少个 炮 考虑进去
那么状态很简单就能出来了:
(很简单得就把炮的限制考虑了进去)
下面考虑转移:
放在有一个棋子的列上:
放在没有棋子的列上:
解释:
放在一个棋子的列:
我们在某一个有一个棋子列放置棋子,会使这一列变为有两个棋子
即我们要得到
而我们又会得到一个新的有两个棋子的列.因此我们之前必须有
而我们又可以在
因此我们要
放在没有棋子的列:
在一个没有棋子的列放置棋子,我们会得到一个新的有一个棋子的列
即我们要从
又因为我在空列中的任何一列放置这个棋子.
所以要
一个放在一个炮的列,一个放在没有炮的列:
两个都放在没有放过炮的地方:
两个都放在有一个炮的地方:
注:以上的
绝对不是我不会打
解释:
如果一个放在一个跑的列,一个放在没放炮的列:
那么放两个炮的列的数量就会加一,放一个炮的数量也会增加一
放在一个炮的地方有
所以需要 $ j(m - (j - 1) - k)
如果放在没有放过炮的地方:
放一个炮的列就会加二
同时又有
所以需要
如果两个都放在有一个炮的地方:
那么就有
所以要
把每种情况都讲的这么详细了,不考虑点个赞吗
在学不会可以剖腹了
愉悦的代码时间:
(一定要注意边界条件)(千万别直接抄)
/*
/> フ
| _ _|
/`ミ _x 彡
/ |
/ ヽ ?
/ ̄| | | |
| ( ̄ヽ__ヽ_)_)
\二つ
*/
#include<bits/stdc++.h>
using namespace std;
const int mod = 9999973;
long long read()
{
long long x = 0, f = 1; char ch = getchar();
while(ch < '0' || ch > '9'){if(ch == '-') f = -1; ch = getchar();}
while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0'; ch = getchar();}
return x * f;
}
long long f[110][110][110], n, m, ans;
long long c(long long x)//计算组合数
{
return (x * (x - 1) / 2) % mod;
}
int main()
{
n = read(), m = read();
f[0][0][0] = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 0; j <= m; j++)
{
for(int k = 0; k <= m - j; k++)
{
f[i][j][k] = f[i - 1][j][k];
if(k >= 1) f[i][j][k] += (f[i - 1][j + 1][k - 1] * (j + 1));//放在有一个棋子的列
if(j >= 1) f[i][j][k] += (f[i - 1][j - 1][k] * (m - j - k + 1));//放在没有棋子的列
if(k >= 2) f[i][j][k] += f[i - 1][j + 2][k - 2] * c(j + 2);//都有一个棋子的列
if(k >= 1) f[i][j][k] += f[i - 1][j][k - 1] * j * (m - j - k + 1);//一个有棋子,一个没有棋子
if(j >= 2) f[i][j][k] += f[i - 1][j - 2][k] * c(m - j - k + 2);//都没有棋子的列
f[i][j][k] %= mod;//不要忘记取模
}
}
}
for(int i = 0; i <= m; i++)
{
for(int j = 0; j <= m; j++)
{
ans += f[n][i][j];//统计每种情况下的方案次数
ans %= mod;//不要忘记取模
}
}
cout << ans;
return 0;
}
总结:
这道题还是挺考验思维的,建议反复思考每种情况的公式及其推导,加深理解,最好搭配上自己的理
解,自己再推一遍,收获真的很不一样(千万别只看题解,自己也要手推一遍)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】