【洛谷 P2051】 [AHOI2009]中国象棋(DP)

题目链接
首先想到状压dp,但是\(n,m\)高达100,怎么压?
容易发现,每行每列最多两个象棋,否则就直接gg了。
一个巧妙的设置状态的方式是,只需要记录到当前行有多少列是放了1个炮和2个炮。
然后每一行有3种选择:不放、放1个、放2个。分情况转移就行了。

#include <cstdio>
const int MOD = 9999973;
const int MAXN = 110;
int n, m, ans;
long long f[MAXN][MAXN][MAXN];
int C(int x){   //C(x,2)return x * (x - 1) / 2;
}
int main(){scanf("%d%d", &n, &m);f[0][0][0] = 1;for(int i = 1; i <= n; ++i)for(int j = 0; j <= m; ++j)for(int k = 0; j + k <= m; ++k){(f[i][j][k] += f[i - 1][j][k]) %= MOD;  //不放(f[i][j + 1][k] += f[i - 1][j][k] * (m - j - k)) %= MOD; //在没有棋子的列放1个if(j) (f[i][j - 1][k + 1] += f[i - 1][j][k] * j) %= MOD;   //在有棋子的列放1个(f[i][j + 2][k] += f[i - 1][j][k] * C(m - j - k)) %= MOD; //在没有棋子的列放2个(f[i][j][k + 1] += f[i - 1][j][k] * (m - j - k) * j) %= MOD;  //一个放在有棋子的列,一个放啊没有棋子的列if(j > 1) (f[i][j - 2][k + 2] += f[i - 1][j][k] * C(j)) %= MOD; //放2个在有棋子的列}for(int i = 0; i <= m; ++i)for(int j = 0; i + j <= m; ++j)(ans += f[n][i][j]) %= MOD;printf("%d\n", ans);return 0;
}

转载于:https://www.cnblogs.com/Qihoo360/p/10918258.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/393572.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

循环 直到 python_如果您在Python中存在慢循环,则可以对其进行修复……直到无法解决为止...

循环 直到 pythonby Maxim Mamaev马克西姆马马耶夫(Maxim Mamaev) Let’s take a computational problem as an example, write some code, and see how we can improve the running time. Here we go.让我们以一个计算问题为例&#xff0c;编写一些代码&#xff0c;看看如何改…

阿里云视频点播解决方案使用教程

2019独角兽企业重金招聘Python工程师标准>>> 课程介绍 视频点播&#xff08;ApsaraVideo for VoD&#xff0c;简称VoD&#xff09;是集视频音视频采集、编辑、上传、自动化转码处理、媒体资源管理、分发加速于一体的一站式音视频点播解决方案。 产品详情&#xff1a…

云服务器安装操作系统后如何连接,服务器如何安装操作系统

服务器如何安装操作系统 内容精选换一换如果您需要使用毕昇编译器&#xff0c;则需要先在服务端安装毕昇编译器。毕昇编译器基于开源LLVM开发&#xff0c;并进行了优化和改进&#xff0c;同时将flang作为默认的Fortran语言前端编译器&#xff0c;是针对鲲鹏平台的高性能编译器。…

换行符

非原创windows保留\r\n作为换行符的原因&#xff1a; 回车键为什么叫回车键&#xff0c;大家有想过没有&#xff0c;字面意思是回去的车子。 第一台打印机&#xff0c;每一行打印完了之后在打印第二行之前&#xff0c;这个喷墨的玩意儿需要先回到这一行的行首&#xff0c;这叫回…

leetcode剑指 Offer 53 - II. 0~n-1中缺失的数字(二分查找)

一个长度为n-1的递增排序数组中的所有数字都是唯一的&#xff0c;并且每个数字都在范围0&#xff5e;n-1之内。在范围0&#xff5e;n-1内的n个数字中有且只有一个数字不在该数组中&#xff0c;请找出这个数字。 示例 1: 输入: [0,1,3] 输出: 2 代码 class Solution {public…

python 0基础起步学习day2

元组&#xff1a;戴上了枷锁的列表 元组是不可改变的&#xff0c;元组是不能随意改变内部的元素的 元组和列表很像&#xff0c;它可以看成是不可修改的列表 所以创建元祖逗号是关键 因为(8,)是元组&#xff0c;这里*就不再是乘号&#xff0c;而是重复拷贝符【重复操作符】 直接…

react中的状态机_在基于状态图的状态机上使用React的模式

react中的状态机by Shawn McKay肖恩麦凯(Shawn McKay) 在基于状态图的状态机上使用React的模式 (Patterns for using React with Statechart-based state machines) Statecharts and state machines offer a promising path for designing and managing complex state in apps…

android scheme打开天猫,淘宝

直接上代码 Intent intent new Intent(); intent.setAction("android.intent.action.VIEW"); /*String url "taobao://shop.m.taobao.com/shop/shop_index.htm?shop_id131259851&spma230r.7195193.1997079397.8.Pp3ZMM&point" "%7B%22…

leetcode1337. 方阵中战斗力最弱的 K 行(优先队列)

给你一个大小为 m * n 的方阵 mat&#xff0c;方阵由若干军人和平民组成&#xff0c;分别用 1 和 0 表示。 请你返回方阵中战斗力最弱的 k 行的索引&#xff0c;按从最弱到最强排序。 如果第 i 行的军人数量少于第 j 行&#xff0c;或者两行军人数量相同但 i 小于 j&#xff…

dp 1.4协议_浅析关于HDMI接口与DP接口

显示器现在主流已经为HDMI接口与DP接口&#xff0c;那么这些接口都有什么区别&#xff0c;以下表格会大致做个区分&#xff0c;建议优先使用DP接口。&#xff08;HDMI2.1接口目前仅发布协议&#xff0c;尚未大规模商用在高清电视机上有部分应用&#xff0c;Mini DP接口版本为DP…

浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。

浅谈 JDBC 中 CreateStatement 和 PrepareStatement 的区别与优劣。

jsp 构建单页应用_如何使用服务器端Blazor构建单页应用程序

jsp 构建单页应用介绍 (Introduction) In this article, we will create a Single Page Application (SPA) using server-side Blazor. We will use an Entity Framework Core database. Single-Page Applications are web applications that load a single HTML page. They dy…

Apache的虚拟主机配置

虚拟主机配置一般可以分为&#xff1a;基于域名基于端口基于IP配置虚拟主机检查防火墙&#xff0c;端口是否打开apache的配置文件。service iptables status #查看防火墙netstat -anp | grep 8021 #端口是必须要考虑的问题locate httpd.confmkdir -p /usr/local/apache/conf/ex…

oracle 的使用

一. docker 模式下进入数据库 ubuntujiang:~$ sudo docker ps -a sudo: unable to resolve host jiang CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS …

sql number转varchar_MySQL 指南之 SQL 语句基础

个人所有文章整理在此篇&#xff0c;将陆续更新收录:知无涯&#xff0c;行者之路莫言终(我的编程之路)零、结构化查询语言&#xff1a;SQL(Structured Query Language)DDL 数据定义语言 管理库&#xff0c;表DML 数据操作语言 增删改查 DCL 数据控制语言 数据控制&#xff0c;权…

leetcode744. 寻找比目标字母大的最小字母(二分查找)

给你一个排序后的字符列表 letters &#xff0c;列表中只包含小写英文字母。另给出一个目标字母 target&#xff0c;请你寻找在这一有序列表里比目标字母大的最小字母。 在比较时&#xff0c;字母是依序循环出现的。举个例子&#xff1a; 如果目标字母 target ‘z’ 并且字符…

H3C交换机 汇聚接口上应用策略路由

QOS 方式的策略路由只能应用在接口或者Vlan接口上&#xff0c;无法应用在2层或者3层的汇聚接口上可以使用PBR的方式将策略路由应用到接口上&#xff0c;QOS策略路由可以和PBR策略路由共存&#xff0c;并且QOS的优先级更高&#xff0c;先匹配QOS&#xff0c;如果匹配不到再匹配P…

【Java NIO深入研究3】文件锁

1.1概述——文件锁 文件锁定初看起来可能让人迷惑。它 似乎 指的是防止程序或者用户访问特定文件。事实上&#xff0c;文件锁就像常规的 Java 对象锁 — 它们是 劝告式的&#xff08;advisory&#xff09; 锁。它们不阻止任何形式的数据访问&#xff0c;相反&#xff0c;它们通…

2018-2019-2 网络对抗技术 20165202 Exp9 Web安全基础

博客目录 一、实践内容 跨站脚本攻击XSS跨站请求伪造CSRFSQL注入攻击二、实验中遇到的问题及解决三、基础问题回答四、实验总结一、实践内容 本实践的目标理解常用网络攻击技术的基本原理。Webgoat实践下相关实验。具体过程&#xff1a; 跨站脚本攻击XSS跨站请求伪造CSRFSQL注入…

leetcode696. 计数二进制子串

给定一个字符串 s&#xff0c;计算具有相同数量0和1的非空(连续)子字符串的数量&#xff0c;并且这些子字符串中的所有0和所有1都是组合在一起的。 重复出现的子串要计算它们出现的次数。 示例 1 : 输入: “00110011” 输出: 6 解释: 有6个子串具有相同数量的连续1和0&#…