Bzoj 4806 炮 (dp)
题目描述
输入输出格式
输入格式:
输出格式:
一行,输出方案数mod 999983。
输入输出样例
1 3
7 分析 : 显然一行一列只能放2个或以下棋子, 否则会相互攻击;
明显的DP;
定义f[i][j][k] , 表示前i行, 有j列是放了1个, k列放了两个; 转移方程 : f[i][j][k] += f[i-1][j][k] 什么都没放;
f[i][j][k] += f[i-1][j-1][k] * (m - (j - 1) - k) 在没放棋子的一列放了一个;
f[i][j][k] += f[i-1][j+1][k-1] * (j + 1) 在有一个棋子的一列放了一个, 变成了两个;
f[i][j][k] += f[i-1][j-2][k] * C(m - (j - 2) - k, 2) 在没放棋子的两列分别放两个棋子;
f[i][j][k] += f[i-1][j][k-1] * j * (m - (j - 1) - k) 直接在没放棋子的一列放上两个棋子;
f[i][j][k] += f[i-1][j+2][k-2] * C(j + 2, 2) 在放了一个棋子的两列风别放上一个; 记得取模; 代码奉上
// By zZhBr
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
const int p = ;
#define int long long int n, m; int f[][][]; int ans; signed main()
{
cin >> n >> m; f[][][] = ; for(register int i = ; i <= n ; i ++)
{
for(register int j = ; j <= m ; j ++)
{
for(register int k = ; k <= m - j ; k ++)
{ f[i][j][k] = (f[i][j][k] + f[i-][j][k]) % p; if(j - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j-][k] * (m - (j - ) - k)) % p; if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j+][k-] * (j + ))% p; if(j - >= )
{
int t = m - (j - ) - k;
f[i][j][k] = (f[i][j][k] + f[i-][j-][k] * (t * (t - )) / ) % p;
} if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j+][k-] * (j + ) * (j + ) / ) % p; if(k - >= )
f[i][j][k] = (f[i][j][k] + f[i-][j][k-] * j * (m - (j - ) - k)) % p; if(i == n) ans = (ans + f[i][j][k]) % p; //printf("n == %lld, f[i][j][k] == %lld\n", i, f[i][j][k]);
}
}
} cout << ans << endl; return ;
}
zZhBr
提交地址 : https://www.lydsy.com/JudgeOnline/problem.php?id=4806 ;
Bzoj 4806 炮 (dp)的更多相关文章
- bzoj 4806: 炮【dp】
同1801 注意到一行只能放012个炮,我们只需要知道列的状态,不用状压行 所以设f[i][j][k]表示前i行有j列有1个炮,有k列有2个炮的方案数 然后分情况讨论转移就行了 #include< ...
- bzoj 4806 炮
Written with StackEdit. Description 众所周知,双炮叠叠将是中国象棋中很厉害的一招必杀技.炮吃子时必须隔一个棋子跳吃,即俗称"炮打隔子". 炮跟炮 ...
- BZOJ 4806 - 4809 象棋四题
4806: 炮 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 103 Solved: 72[Submit][Status][Discuss] Des ...
- BZOJ.2655.calc(DP/容斥 拉格朗日插值)
BZOJ 洛谷 待补.刚刚政治会考完来把它补上了2333.考数学去了. DP: 首先把无序化成有序,选严格递增的数,最后乘个\(n!\). 然后容易想到令\(f_{i,j}\)表示到第\(i\)个数, ...
- bzoj4806 炮——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 看到这题首先会想到状压什么乱七八糟的,然而很难做: 其实,因为求的是方案数,所以并不需 ...
- BZOJ 3270 && BZOJ 1778 (期望DP && 高斯消元)
BZOJ 3270 :设置状态为Id(x,y)表示一人在x,一人在y这个状态的概率. 所以总共有n^2种状态. p[i]表示留在该点的概率,Out[i]=(1-p[i])/Degree[i]表示离开该 ...
- BZOJ 1040 树形DP+环套树
就是有n个点n条边,那么有且只有一个环那么用Dfs把在环上的两个点找到.然后拆开,从这条个点分别作树形Dp即可. #include <cstdio> #include <cstrin ...
- bzoj 3851: 2048 dp优化
3851: 2048 Time Limit: 2 Sec Memory Limit: 64 MBSubmit: 22 Solved: 9[Submit][Status] Description T ...
- BZOJ 1068 (区间DP)
题意:字符串的压缩,f[l][r][0]代表还没M,f[l][r][1]代表有M. #include<cstdio> #include<cmath> #include<c ...
随机推荐
- 作为IT面试官,我如何考核计算机专业毕业生?作为培训班老师,我又如何提升他们?
我最近几年一直在做技术面试官,除了面试有一定工作经验的社会人员外,有时还会面试在校实习生和刚毕业的大学生.同时,我也在学校里做过兼职讲师,上些政府补贴课程(这些课程有补贴,学生不用出钱),所以我会在不 ...
- Centos第一次使用配置IP地址
1.vim /etc/sysconfig/network-scripts/ifcfg-eth0 修改默认配置文件 TYPE=Ethernet BOOTPROTO=static #静态 可修改为[n ...
- response向客户端写入数据
1.写入文字: protected void doGet(HttpServletRequest request, HttpServletResponse response) throws Servle ...
- Basler acA2500-14gm 连接采图报错处理
新购 Basler acA2500-14gm 相机,使用从官方网站下载的 pylon v6 版本连接测试,报错: Type Time Source MessageError 2 ...
- 2018年蓝桥杯java b组第四题
标题:测试次数 x星球的居民脾气不太好,但好在他们生气的时候唯一的异常举动是:摔手机.各大厂商也就纷纷推出各种耐摔型手机.x星球的质监局规定了手机必须经过耐摔测试,并且评定出一个耐摔指数来,之后才允许 ...
- video.js 使用中抛出异常:DOMException: "'#1098942864706113536' is not a valid selector"
原因:video.js 在获取页面元素时使用的是querySelector方法,由于querySelector是按css规范来实现的,所以它传入的字符串中第一个字符不能是数字. 解决:元素Id在赋值时 ...
- 限制页面被pc端访问
在需要被pc端访问的页面的脚本里加上如下代码即可: <script>var system = {}; var p = navigator.platform; var u = navigat ...
- 长短时记忆神经网络(LSTM)介绍以及简单应用分析
本文分为四个部分,第一部分简要介绍LSTM的应用现状:第二部分介绍LSTM的发展历史,并引出了受众多学者关注的LSTM变体——门控递归单元(GRU):第三部分介绍LSTM的基本结构,由基本循环神经网络 ...
- Vue-cli连接mysql
本文把前后台一起串起来,前端使用vue-cli后台用nodejs连接数据库,vue-cli请求接口其数据是来自于mysql数据. 一.vue-cli请求接口部分 <template> &l ...
- Redis优雅实现分布式锁
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 在实际项目开发中经常会遇到这样一个业务场景:如果同一台机器有多个线程抢夺同一个共享资源,同一个线程多次执行会出 ...