bzoj4806 炮
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806
这种题应该想状压的。
于是发现压不下,结合每一行每一列最多放两个炮想到记一下放炮的列就行。
**又考虑到当前行能怎么放只与之前放0/1/2个炮的列数有关,与具体在哪一列无关。
于是记录一下前 i-1 行有多少列放了1/2个炮,就能顺利转移了。
别忘了考虑全所有情况。
(转移条件只考虑数组不越界就行。像最后那个转移,j=0体现在*j上)
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=;const ll mod=;
ll n,m,dp[N][N][N],ans;
ll c(ll a){return (a*(a-)/)%mod;}
int main()
{
scanf("%lld%lld",&n,&m);
dp[][][]=;
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=;k<=m-j;k++)
{
dp[i][j][k]+=(dp[i-][j][k])%=mod; //
if(j)(dp[i][j][k]+=dp[i-][j-][k]*(m-j+-k))%=mod; //
if(k&&j+<=m)(dp[i][j][k]+=dp[i-][j+][k-]*(j+))%=mod; //
if(j>=)(dp[i][j][k]+=dp[i-][j-][k]*c(m-j+-k))%=mod; //
if(k>=)(dp[i][j][k]+=dp[i-][j+][k-]*c(j+))%=mod; //
if(k)(dp[i][j][k]+=dp[i-][j][k-]*j*(m-j-k+))%=mod; ////////
}
for(int j=;j<=m;j++) for(int k=;k<=m-j;k++) (ans+=dp[n][j][k])%=mod;
printf("%lld",ans);
return ;
}
bzoj4806 炮的更多相关文章
- bzoj4806 炮——DP
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=4806 看到这题首先会想到状压什么乱七八糟的,然而很难做: 其实,因为求的是方案数,所以并不需 ...
- 【bzoj4806~bzoj4808】炮车马后——象棋四连击
bzoj4806——炮 题目传送门:bzoj4806 这种题一看就是dp...我们可以设$ f[i][j][k] $表示处理到第$ i $行,有$ j $列没放炮,$ k $列只放了一个炮.接着分情况 ...
- 【bzoj4806~bzoj4809】 象棋四连发 DP-高精度-匈牙利算法-dfs
都是经典题了吧..我好无聊.. 4806 4806-1801是双倍经验..DP方程看代码吧.. /* http://www.cnblogs.com/karl07/ */ #include <cs ...
- 炮(棋盘DP)
一直以为自己写的就是状态压缩,结果写完才知道是个棋盘dp 首先看一下题目 嗯,象棋 ,还是只有炮的象棋 对于方案数有几种,我第一个考虑是dfs,但是超时稳稳的,所以果断放弃 然后记得以前有过和这个题差 ...
- 【BZOJ-4591】超能粒子炮·改 数论 + 组合数 + Lucas定理
4591: [Shoi2015]超能粒子炮·改 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 95 Solved: 33[Submit][Statu ...
- [歪谈]拽一个贵人出来给你"当炮架子"
我们在古装神话剧中经常会听到某个“先知”对前来算命的人说:你会在某某时刻遇到你的贵人.而这个贵人会在事业上助你一臂之力. 这里有个问题:贵人到底是什么?我们怎样去寻找我们的贵人. 前几天有个网友来咨询 ...
- [ACM_图论] Fire Net (ZOJ 1002 带障碍棋盘布炮,互不攻击最大数量)
Suppose that we have a square city with straight streets. A map of a city is a square board with n ...
- 3016 质子撞击炮 II
3016 质子撞击炮 II 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description [抱歉数据错误~~已修 ...
- 人家为撩妹就鼓捣个网页,我做了个约炮APP(已开源)
每年初夏第一场雷雨刚过,漫步河边的草坪,总是能闻到伴随着泥土的清新,这不是coco的前香,让人神魂颠倒:也不是gucci的后香,让人痴迷如梦.如24节气一样,它提醒人们,夏天到了.昨晚成都下了第一场雷 ...
随机推荐
- 搞懂分布式技术4:ZAB协议概述与选主流程详解
搞懂分布式技术4:ZAB协议概述与选主流程详解 ZAB协议 ZAB(Zookeeper Atomic Broadcast)协议是专门为zookeeper实现分布式协调功能而设计.zookeeper主要 ...
- 编写3ds max插件时遇到的问题总结
本文为大便一箩筐的原创内容,转载请注明出处,谢谢:http://www.cnblogs.com/dbylk/ 这几天在给公司的美术编写3ds max 2009使用的插件,遇到了一些问题,在此记录一下解 ...
- vue的slot的使用问题
slot的使用问题 根据官方文档来说,有三种使用方式 https://cn.vuejs.org/v2/guide/components.html#%E4%BD%BF%E7%94%A8%E6%8F%92 ...
- js排序算法04——归并排序
归并排序是一种分治算法.思想是把原数组切分成较小的数组,直到每个小数组只有一个位置,再将小数组归并成较大的数组,直到最后有一个完整有序的大数组. js实现如下: function mergeSort( ...
- mybatis定义拦截器
applicationContext.xml <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlS ...
- bzoj2700
题解: dp dp[i][j]表示i个红,j个绿的最小代价 然后再加上两位k,l,表示k个红连,l个绿连 然后转移 代码: #include<bits/stdc++.h> using na ...
- LeetCode OJ:Copy List with Random Pointer(复制存在随机链接的链表)
A linked list is given such that each node contains an additional random pointer which could point t ...
- shell脚本实例二
练习题一:对已经存在的用户做密码的修改等操作 vim user_ctrl.sh ##进行如下编写 #!/bin/bashShow(){ read -p ...
- C++实现线程同步的几种方式
线程同步是指同一进程中的多个线程互相协调工作从而达到一致性.之所以需要线程同步,是因为多个线程同时对一个数据对象进行修改操作时,可能会对数据造成破坏,下面是多个线程同时修改同一数据造成破坏的例子: # ...
- vue-parcel打包入门
what 快速,零配置的 Web 应用程序打包器 why 快捷,配置比较少 使用 Parcel 打包的 vue HelloWorld 应用.GitHub 地址: https://github.com/ ...