bzoj1801 AHOI2009 chess
来源:互联网 发布:如何成为黑客 知乎 编辑:程序博客网 时间:2024/06/06 20:00
动态规划计数问题
每行每列最多两个炮
以每一行划分状态
bzoj上不删掉system("pause");就无限RE
#include <iostream>#include <cstdio>#include <cstring>#include <cstdlib>#include <cmath>#include <algorithm>using namespace std;#define P 9999973long long f[105][105][105];int n,m;long long ans;int main(){ scanf("%d%d", &n, &m); //考虑每一行 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 (j>=1) f[i][j][k] = (f[i][j][k] + f[i-1][j-1][k] * (m-j-k+1) % P) % P;//还要乘的这个数是第i行的选择种数 if (k>=1) f[i][j][k] = (f[i][j][k] + f[i-1][j+1][k-1]*(j+1) % P) % P; if (j>=2) f[i][j][k] = (f[i][j][k] + (m-j-k+2) * (m-j-k+1) / 2 % P * f[i-1][j-2][k] % P) % P; if (k>=1) f[i][j][k] = (f[i][j][k] + j * (m-j-k+1) % P * f[i-1][j][k-1] % P) % P; if (k>=2) f[i][j][k] = (f[i][j][k] + (j+2) * (j+1) / 2 % P * f[i-1][j+2][k-2] % P) % P; } } ans = 0; for (int j=0;j<=m;j++) for (int k=0;k<=m-j;k++) ans = (ans + f[n][j][k]) % P; printf("%lld\n", ans);}
阅读全文
0 0
- BZOJ1801: [Ahoi2009]chess 中国象棋
- [BZOJ1801][Ahoi2009]chess 中国象棋
- bzoj1801【AHOI2009】chess 中国象棋
- BZOJ1801: [Ahoi2009]chess 中国象棋
- BZOJ1801: [Ahoi2009]chess 中国象棋
- bzoj1801: [Ahoi2009]chess 中国象棋
- bzoj1801: [Ahoi2009]chess 中国象棋
- bzoj1801 AHOI2009 chess
- BZOJ1801 Ahoi2009 chess 中国象棋
- Bzoj1801:[Ahoi2009]chess 中国象棋:dp
- 12.9 bzoj1801 [Ahoi2009]chess 中国象棋
- bzoj1801 [Ahoi2009]chess 中国象棋 DP
- [DP] BZOJ1801: [Ahoi2009]chess 中国象棋
- 【bzoj1801】【AHOI2009】【chess中国象棋】【组合数学】
- bzoj1801: [Ahoi2009]chess 中国象棋(Dp)
- AHOI2009 chess
- 【BZOJ1801】【AHOI2009】中国象棋(动态规划)
- 1801: [Ahoi2009]chess 中国象棋
- python中出现的__name__的原因
- 微信小程序转发
- github 提交
- 记录安装opencv的过程和碰到的问题以及解决方法
- bootstrap + validate总结
- bzoj1801 AHOI2009 chess
- 回溯法
- xpanding Rods
- 欢迎使用CSDN-markdown编辑器
- tcp状态转移
- Linux内核引导代码分析
- 1. Docker启示录
- 二分查找法
- C++如何确保输出的小数位数——以计算加权平均值为例