博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P2051 中国象棋
阅读量:4326 次
发布时间:2019-06-06

本文共 1675 字,大约阅读时间需要 5 分钟。

题目描述

这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法。大家肯定很清楚,在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同一行或同一列中,且它们之间恰好 有一个棋子。你也来和小可可一起锻炼一下思维吧!

输入输出格式

输入格式:

一行包含两个整数N,M,之间由一个空格隔开。

输出格式:

总共的方案数,由于该值可能很大,只需给出方案数模9999973的结果。

输入输出样例

输入样例#1:
1 3
输出样例#1:
7

说明

样例说明

除了3个格子里都塞满了炮以外,其它方案都是可行的,所以一共有2*2*2-1=7种方案。

数据范围

100%的数据中N和M均不超过100

50%的数据中N和M至少有一个数不超过8

30%的数据中N和M均不超过6

 

首先可以知道可行的方案就是每行每列的放的炮数<=2

50%数据是状压dp,然后我们发现,他的矩形是规则的而且没有障碍一类的。

那么答案就跟他的每个具体排列没有直接关系,直接用dp[i][j]表示到当前行为止有多少炮数为1的列和炮数为2的列

由于每行也最多只能放两个炮,所以可以用dp[i][j]

转移到dp[i-1][j+1](有一个炮数为1的列在此行放上一个炮)

转移到dp[i+1][j](有一个炮数为0的列在此行放上一个炮)

转移到dp[i-2][j+2](有两个炮数为1的列在此行放上一个炮)

转移到dp[i+2][j](有两个炮数为0的列在此行放上一个炮)

转移到dp[i][j+1](有一个炮数为0的列在此行放上一个炮,有一个炮数为1的列在此行放上一个炮)

//Serene#include
#include
#include
#include
#include
#include
using namespace std;const int maxn=100+10,mod=9999973;long long n,m,dp[maxn][maxn],f[maxn][maxn],ans;int main() { scanf("%lld%lld",&n,&m); dp[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) if(dp[j][k]){ if(j)f[j-1][k+1]=(f[j-1][k+1]+dp[j][k]*j%mod)%mod; if(m-j-k)f[j+1][k]=(f[j+1][k]+dp[j][k]*(m-j-k)%mod)%mod; if(j>1)f[j-2][k+2]=(f[j-2][k+2]+dp[j][k]*j*(j-1)/2%mod)%mod; if(m-j-k>1)f[j+2][k]=(f[j+2][k]+dp[j][k]*(m-j-k)*(m-j-k-1)/2%mod)%mod; if(m-j-k)f[j][k+1]=(f[j][k+1]+dp[j][k]*(m-j-k)*j%mod)%mod; f[j][k]=(f[j][k]+dp[j][k])%mod; } memcpy(dp,f,sizeof(f));memset(f,0,sizeof(f)); } for(int j=0;j<=m;++j) for(int k=0;k<=m-j;++k) ans=(ans+dp[j][k])%mod; printf("%lld",ans); return 0;}

  

转载于:https://www.cnblogs.com/Serene-shixinyi/p/7478793.html

你可能感兴趣的文章
02-环境搭建
查看>>
spring第二冲刺阶段第七天
查看>>
搜索框键盘抬起事件2
查看>>
阿里百川SDK初始化失败 错误码是203
查看>>
透析Java本质-谁创建了对象,this是什么
查看>>
BFS和DFS的java实现
查看>>
关于jquery中prev()和next()的用法
查看>>
一、 kettle开发、上线常见问题以及防错规范步骤
查看>>
eclipse没有server选项
查看>>
CRC码计算及校验原理的最通俗诠释
查看>>
QTcpSocket的连续发送数据和连续接收数据
查看>>
使用Gitbook来编写你的Api文档
查看>>
jquery扩展 $.fn
查看>>
tomcat 多实例的Sys V风格脚本
查看>>
程序员如何讲清楚技术方案
查看>>
MapReduce-实践1
查看>>
UVa 815 - Flooded!
查看>>
jQuery基础--选择器
查看>>
mybatis使用collection查询集合属性规则
查看>>
Markdown指南
查看>>