洛谷2051 [AHOI2009]中国象棋
题目链接
题意概述:n行m列棋盘放若干个棋子每行每列最多两个求方案总数,答案对9999973取模。
可以比较容易看出这是个dp,设f[i][j][k]表示前i行j列放1个棋子k列放2个棋子的方案总数。转移时分类讨论+计数就好了。分类讨论比较麻烦需要仔细考虑一下。
吐槽:我把循环里的m写成n还有50,查了半天(真的半天)取模QAQ
#include<cstring> #include<iostream> #include<cctype> #include<cstdio> #include<algorithm> #define now f[i][j][k] #define ll unsigned long long using namespace std; inline int read() {register int X=0;register char ch=0;bool flag=0;for(; !isdigit(ch); ch=getchar()) if(ch=='-') flag=1;for(; isdigit(ch); ch=getchar()) X=(X<<3)+(X<<1)+ch-'0';return (flag ? -X : X); } int N=101; const ll mod=9999973; int n,m; ll f[201][201][201],ans; int C(int x) {return x*(x-1)/2; } int main() {n=read(),m=read(),f[0][0][0]=1;for(int i=0;i<n;i++)for(int j=0;j<=m;j++)for(int k=0;k+j<=m;k++){if(now){(f[i+1][j][k]+=now)%=mod;if(m-j-k > 0) (f[i+1][j+1][k]+=now*(m-j-k))%=mod;if(j > 0) (f[i+1][j-1][k+1]+=now*j)%=mod;if(m-j-k > 1) (f[i+1][j+2][k]+=now*(C(m-j-k)%mod))%=mod;if(j > 0 && m-j-k > 0) (f[i+1][j][k+1]+=now*j%mod*(m-j-k))%=mod;if(j > 1) (f[i+1][j-2][k+2]+=now*(C(j)%mod))%=mod;}}for(int i=0; i<=m; i++)for(int j=0; j+i<=m; j++)(ans+=f[n][i][j])%=mod;printf("%llu\n",ans); }
转载于:https://www.cnblogs.com/mordor/p/9578758.html
洛谷2051 [AHOI2009]中国象棋相关推荐
- 洛谷 P2051 [AHOI2009]中国象棋 状态压缩思想DP
P2051 [AHOI2009]中国象棋 题意: 给定一个n*m的空棋盘,问合法放置任意多个炮有多少种情况.合法放置的意思是棋子炮不会相互打到. 思路: 这道题我们可以发现因为炮是隔一个棋子可以打出去 ...
- 洛谷 - P2051 [AHOI2009]中国象棋(计数dp)
题目链接:点击查看 题目大意:给出一个 n * m 的棋盘,可以在任意位置放置 "炮",问一共可以放置多少种可行的方案 题目分析:转换题意,就是问每一行.每一列至多有两个棋子的方案 ...
- BZOJ 1801 [Ahoi2009]中国象棋(线性动规)(洛谷P2051)
题意:就是在n*m的格子中放"炮"(中国象棋中的棋子)问有多少种放法,使得没有任意的两个炮相互攻击 思路:我们很容易的得到一列或者一行中最多放下两个炮(我也只能得到这些了,满脑子状 ...
- LG_2051_[AHOI2009]中国象棋
题目描述 这次小可可想解决的难题和中国象棋有关,在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法.大家肯定很清楚,在中国象棋中炮的行走方式是 ...
- AHOI2009 中国象棋
题目链接 题目描述 在一个N行M列的棋盘上,让你放若干个炮(可以是0个),使得没有一个炮可以攻击到另一个炮,请问有多少种放置方法. (在中国象棋中炮的行走方式是:一个炮攻击到另一个炮,当且仅当它们在同 ...
- 【洛谷 P2051】 [AHOI2009]中国象棋(DP)
题目链接 首先想到状压dp,但是\(n,m\)高达100,怎么压? 容易发现,每行每列最多两个象棋,否则就直接gg了. 一个巧妙的设置状态的方式是,只需要记录到当前行有多少列是放了1个炮和2个炮. 然 ...
- 洛谷 P4127 [AHOI2009]同类分布
题意简述 求l~r之间各位数字之和能整除原数的数的个数. 题解思路 数位DP 代码 #include <cstdio> #include <cstring> typedef l ...
- [AHOI2009]中国象棋
https://www.luogu.org/problemnew/show/P2051 C++版本一 数位DP变形 棋子的顺序是无所谓的,并不需要准确知道当前棋盘的状态 于是有了100分做法:dp[i ...
- 洛谷P2023 [AHOI2009]维护序列
数据比线段树2要毒瘤,一直60分的原因是: 1.long long 没开 2.没有边做边%或者像我P3373一样写了个看着像的边做边% 3.要看注释的话可以跳到P3373 上代码 1 #include ...
最新文章
- Linux CENTOS7 Linux网络性能测试工具-iperf 安装过程以及示例!
- ajax一次请求多条记录,Jquery 一次处理多个ajax请求的代码
- RHEL MRTG 系统流量监测的安装和配置
- visio网络拓扑图_人船模型怎么画?分享高颜值模型图软件
- USACO Training Section 1.2 [USACO1.2]回文平方数
- sqlserver 中事务与错误机制的处理
- 通讯接口应用笔记2:MAX3160实现多协议通讯
- linux上的定时器上的jiffies,Linux kernel -- 定时器/jiffies
- Android自动化测试之路——技术准备
- selector选择器查询
- poj 3422 (费用流)
- 网易通行证html代码,JavaScript实现仿网易通行证表单验证
- 10道经典java面试题_实习生必问(java基础)
- 计算机硬件的五大部分由谁提出,存储程序原理是由谁于1946年提出的,它明确了计算机硬件组成的五大部分() - 问答库...
- C语言:输入10个整数,找出其中绝对值最小的数
- 美团优选总显示服务器403,最新提示!美团优选商家端登录入口
- 【读书笔记】薛兆丰经济学讲义——人人都要掌握的经济学思维
- 【信息技术学考】2021年深圳市高中学业水平考试卷(解析版)
- 头条项目---01项目介绍和工程搭建
- 西电研究生毕业论文latex模板使用指南