BZOJ 1801中国象棋 DP
1801: [Ahoi2009]chess 中国象棋
Time Limit: 10 Sec Memory Limit: 64 MB
Submit: 1426 Solved: 826
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
Sample Output
HINT
除了在3个格子中都放满炮的的情况外,其它的都可以.
100%的数据中N,M不超过100
50%的数据中,N,M至少有一个数不超过8
30%的数据中,N,M均不超过6
----------------------------------------------------------
将题目化简为设计01矩阵 每一行每一列至多2个1。求有几种方案。
设f[i][j][k]代表到第i行有j列放了1个象棋k列放了0个象棋有两个象棋的列不用考虑因为不能再放了。
递推方程如下:
f[i][j][k]=f[i-1][j][k] 第i行不放。
f[i][j][k]+=f[i-1][j-1][k+1]*(k+1) 在i-1行中任选一列(该列的棋子数=0)后面放一颗。有 k+1种放法。
f[i][j][k]+=f[i-1][j+1][k]*(j+1) 选一列(该列棋子数=1)
f[i][j][k]+=f[i-1][j][k+1]*j*(k+1) 选两列 一列棋子数=1 一列棋子数=0
f[i][j][k]+=f[i-1][j-2][k+2]*(k+2)*(k+1)/2 选两列棋子数=0的
f[i][j][k]+=f[i-1][j+2][k]*(j+2)*(j+1)/2 选两列棋子数=1的
最后统计 f[n][i][j] 0<=i,j<=m;
代码如下:
#include<cstdio>
#include<iostream>
#define MOD 9999973
#define MAXN 105
#define For(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
long long f[MAXN][MAXN][MAXN];
int main()
{
int n,m;cin>>n>>m;
f[][][m]=;
f[][][m-]=m;
f[][][m-]=m*(m-)/;
For(i,,n)
{
For(j,,m)
{
For(k,,m)
{
f[i][j][k]=(f[i-][j][k]+f[i-][j-][k+]*(k+)%MOD+f[i-][j+][k]*(j+)%MOD)%MOD+f[i-][j][k+]*j*(k+)%MOD;
f[i][j][k]+=(f[i-][j-][k+]*(k+)*(k+)/)%MOD+f[i-][j+][k]*(j+)*(j+)/;
f[i][j][k]%=MOD;
}
}
}
long long ans=;
For(i,,m)
{
For(j,,m)
{
ans+=f[n][i][j];
ans%=MOD;
}
}
printf("%lld",ans);
}
BZOJ 1801中国象棋 DP的更多相关文章
- BZOJ 1801: [Ahoi2009]chess 中国象棋( dp )
dp(i, j, k)表示考虑了前i行, 放了0个炮的有j列, 放了1个炮的有k列. 时间复杂度O(NM^2) -------------------------------------------- ...
- BZOJ 1801--中国象棋(DP)
1801: [Ahoi2009]chess 中国象棋 Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1995 Solved: 1160[Submit] ...
- [P2051 [AHOI2009]中国象棋] DP
https://www.luogu.org/problemnew/show/P2051 题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一 ...
- Luogu P2051 [AHOI2009]中国象棋(dp)
P2051 [AHOI2009]中国象棋 题面 题目描述 这次小可可想解决的难题和中国象棋有关,在一个 \(N\) 行 \(M\) 列的棋盘上,让你放若干个炮(可以是 \(0\) 个),使得没有一个炮 ...
- 【BZOJ1801】[Ahoi2009]chess 中国象棋 DP
[BZOJ1801][Ahoi2009]chess 中国象棋 Description 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮 ...
- BZOJ 1801: [Ahoi2009]chess 中国象棋 [DP 组合计数]
http://www.lydsy.com/JudgeOnline/problem.php?id=1801 在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放 ...
- JZOJ 1667 ( bzoj 1801 ) [ AHOI 2009 ] 中国象棋 —— DP
题目:https://jzoj.net/senior/#main/show/1667 首先,一行.一列最多只有 2 个炮: 所以记录一下之前有多少行有 0/1/2 个炮,转移即可: 注意取模!小心在某 ...
- bzoj1801: [Ahoi2009]chess 中国象棋 dp
题意:在N行M列的棋盘上,放若干个炮可以是0个,使得没有任何一个炮可以攻击另一个炮. 请问有多少种放置方法,中国像棋中炮的行走方式大家应该很清楚吧. 题解:dp[i][j][k]表示到了第i行,有j列 ...
- P2051 [AHOI2009]中国象棋——DP(我是谁,我在哪,为什么)
象棋,给你棋盘大小,然后放炮(炮的数量不限),不能让炮打到其他的炮,问方案数: 数据n,m<=200; 状态压缩似乎能做,但是我不会: 因为只要状态数,所以不必纠结每种状态的具体情况: 可以想出 ...
随机推荐
- VMware下利用ubuntu13.04建立嵌入式开发环境之二
之前在VMware中安装完Ubuntu系统,接下来开始设置开发中用到的服务和工具,以及系统设计. 1.安装VMware工具:打开VMware软件,在菜单->VM->Install VMwa ...
- [windows操作系统]目录和文件相关操作
1.导出目录的树形结构到文本文件 tree /F d:\dir1 > d:\tree.txt 就是将d:\dir1的目录结构以树状形式输出报告到文件tree.txt中. 效果是这样的:
- 初步了解JPA
想当初07.08年的时候,毕业之季,正思考着离开学校要去做什么工作.为了有一份薪资不错,可以长久发展,也正是自己喜欢的行业.于是乎决定投身于计算机行业.当年正是JAVA的火热时期.到处都是JAVA培训 ...
- Why sql is called structured query language?1 - 12
SQL has much to do with a researcher at IBM, Edgar F. (Ted) Codd, an Oxford-trained mathematician, w ...
- 【转】深入理解JavaScript闭包闭包(closure) (closure)
一.什么是闭包?"官方"的解释是:闭包是一个拥有许多变量和绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分.相信很少有人能直接看懂这句话,因为他描述 ...
- jython安装
下载了jython后:http://www.cr173.com/soft/9719.html 这是我当时下载的网站 官网很慢开始->运行->cmd->打开dos命令窗口,转到jyth ...
- OKHttp
以前学习android知识时 不怎么总结 以后学到的知识尽量多反思 相信"学而不思则惘.思而不学则怠"这句话 希望未来的日子 快乐的生活 快乐的编码!第一遍博文总结一下OKHtt ...
- oc string
转自http://www.cnblogs.com/CCSSPP/archive/2011/10/20/2218897.html 备用查看 NSLog(@"字符串处理"); //获得 ...
- 以策略为导向的VI设计
从美学角度评价一个标志(LOGO)不是最佳方法,标志设计不是为了参加选美.标识要求除了审美功能外还应包括很多元素. 要说标志,先从CIS(企业形象系统)开始入手,里面分成MI.VI和BI,分别指企业的 ...
- aspx前台调用cs后台方法
随着对于mvc的习惯使用,aspx页面渐渐用的不怎么用了,主要是生命周期感觉上比较慢,要么就用html+handler一般处理程序来装下逼.虽然不用,但还是要给刚工作的人讲下,相信不少人都想过:既然前 ...