博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AHOI中国象棋(dp)
阅读量:6692 次
发布时间:2019-06-25

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

大力dp题。

每行每列最多放两个,考虑用行作为dp阶段。

dp[i][j][k]表示i行,有一个的有j列,有两个的有k列。

然后就是分类讨论。

一个都不放,放一个在0出,放一个在1出,放两个在0,放两个在1,放两个在01,大力转移。

Code

#include
using namespace std;long long n,m,dp[102][102][102],ans,mod;inline int c(int n){
return (n*(n-1))>>1;}int main(){ cin>>n>>m; mod=9999973; dp[0][0][0]=1; for(int i=1;i<=n;++i) for(int j=0;j<=m;++j) for(int k=0;k+j<=m;++k) { dp[i][j][k]+=dp[i-1][j][k]; dp[i][j][k]%=mod; if(m-k-j+1>0&&j-1>=0)dp[i][j][k]+=dp[i-1][j-1][k]*(m-k-j+1); dp[i][j][k]%=mod; if(j+1<=m&&k-1>=0)dp[i][j][k]+=dp[i-1][j+1][k-1]*(j+1); dp[i][j][k]%=mod; if(j-2>=0&&m-k-j+2>0)dp[i][j][k]+=dp[i-1][j-2][k]*c(m-k-j+2); dp[i][j][k]%=mod; if(j+2<=m&&k-2>=0)dp[i][j][k]+=dp[i-1][j+2][k-2]*c(j+2); dp[i][j][k]%=mod; if(k-1>=0&&j>0)dp[i][j][k]+=dp[i-1][j][k-1]*(m-j-k+1)*j; dp[i][j][k]%=mod; } for(int i=0;i<=m;++i) for(int j=0;j+i<=m;++j) ans+=dp[n][i][j],ans%=mod; cout<

 

转载于:https://www.cnblogs.com/ZH-comld/p/9418131.html

你可能感兴趣的文章
linux 中\r
查看>>
Centos&RHEL 6安装图形化
查看>>
计算缓存大小和清除缓存
查看>>
Web服务精讲–搭个 Web 服务器(二)
查看>>
XUtils===XUtils3框架的基本使用方法
查看>>
windows下 安装Kali Linux到 U盘的方法
查看>>
Jenkins配置MSBuild编译.net4.6的项目
查看>>
laravel的一些坑
查看>>
Kali linux 2016.2(Rolling)安装之后的常用配置
查看>>
MySQL的数据模型
查看>>
【转载】高性能IO设计 & Java NIO & 同步/异步 阻塞/非阻塞 Reactor/Proactor
查看>>
关于Elasticsearch单个索引文档最大数量问题
查看>>
Android自定义ImageView实现图片圆形 ,椭圆和矩形圆角显示
查看>>
Sqlserver双机热备文档(无域)
查看>>
java8的接口新特性(可以有方法体的接口)(转)
查看>>
Spring MVC学习摘要
查看>>
How to use JDBC-Authentication of Spring Boot/Spring Security with Flyway
查看>>
Hadoop MapReduce编程 API入门系列之Crime数据分析(二十五)(未完)
查看>>
大漠插件使用
查看>>
百度echarts
查看>>