首页 > 其他分享 >P2051 [AHOI2009] 中国象棋 题解

P2051 [AHOI2009] 中国象棋 题解

时间:2023-05-02 16:45:38浏览次数:41  
标签:中国象棋 AHOI2009 题解 ll int 棋子 define mod

DP。状态设计是点睛之笔。

首先显然有每行或每列只能有至多 \(2\) 个棋子。

设状态 \(f_{i,j,k}\) 为第 \(i\) 行,有 \(j\) 列只放了一个棋子,\(k\) 列放了两个棋子。

之后直接转移即可。注意边界判断。

code:

点击查看代码
#include<bits/stdc++.h>
#define ll long long
#define debug cout<<"debug\n"
#define vi vector<int>
#define imp map<int,int>
#define il inline
#define pb push_back
using namespace std;
const int N=105,mod=9999973;
int n,m;
ll f[N][N][N];
ll C(ll x){
	return (x*(x-1))/2%mod;
}
int main(){
	freopen("D.in","r",stdin);
	freopen("D.out","w",stdout);
	cin>>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;k<=m-j;k++){
				f[i][j][k]=f[i-1][j][k];
				if(j>0){//0+1
					f[i][j][k]+=f[i-1][j-1][k]*(m-(j-1)-k)%mod;
					f[i][j][k]%=mod;
				}
				if(k>0){//1+2
					f[i][j][k]+=f[i-1][j+1][k-1]*(j+1)%mod;
					f[i][j][k]%=mod;
				}
				if(k>1){//1*2+2*2
					f[i][j][k]+=f[i-1][j+2][k-2]*C(j+2)%mod;
					f[i][j][k]%=mod;
				}
				if(j>1){//0*2+1*2
					f[i][j][k]+=f[i-1][j-2][k]*C(m-(j-2)-k)%mod;
					f[i][j][k]%=mod;
				}
				if(j>0&&k>0){//0+1,1+2
					f[i][j][k]+=f[i-1][j][k-1]*(m-j-(k-1))*j;
					f[i][j][k]%=mod;
				}
			}
		}
	}	
	ll ans=0;
	for(int i=0;i<=m;i++){
		for(int j=0;j<=m;j++){
			ans+=f[n][i][j];
			ans%=mod;
		}
	}
	cout<<ans<<"\n";
	return 0;
}

标签:中国象棋,AHOI2009,题解,ll,int,棋子,define,mod
From: https://www.cnblogs.com/victoryang-not-found/p/17367866.html

相关文章

  • Java cmd下编译乱码问题解决办法
    1、报错样式 2、解决办法1)指定字符集,如下 2)修改编码格式通过“记事本”打开—》另存为3)修改环境变量此电脑——》属性——》高级系统设置——》环境变量——》(系统环境变量)新建——》“JAVA_TOOL_OPTIONS” “-Dfile.encoding=UTF-8”如下图:——》重启cmd,再......
  • CF1034D Intervals of Intervals 题解
    传送门CF1034DIntervalsofIntervals题目大意有\(n\)个线段,第\(i\)个是\([a_i,b_i]\)。定义区间\([l,r]\)的价值是第\(l\)个线段到第\(r\)个线段的并的长度。找出\(k\)个不同的区间,使得总价值最大。输出最大总价值。\(1\len\le3\times10^5,1\lek\le......
  • asm_second 题解(坐标转换+二维偏序)
    QuestionAsm.Def在第一象限内找到了n个可疑点。他需要为导弹规划路径。如图所示,导弹一开始在(0,0)。它只能朝着一定的方向——即严格夹在图中两条射线间的方向(白色部分)前进。注意,它不能沿着这两条射线前进,当然也不能停在原地。当导弹到达某个可疑点后,它仍然只能朝着该范围内......
  • 2023湖北CCPC省赛 蒻蒟的部分题解
    题目地址C.DarknessI题意:有一个n*n的方格,最开始全是白色,如果白色周围4格有两个黑色格子,1秒后这个白色格子会变成黑色,问如果要使全部格子都变为黑色,最开始最少需要涂黑几个格子Solution对于两个黑色格子,只有当满足\[|x_1-x_2|+|y_1-y_2|≤2\]才能涂黑以这两个格子为顶点的矩......
  • 2023 Hubei Provincial Collegiate Programming Contest题解 C F H I J K M
    补题链接:https://codeforces.com/gym/104337原文链接:https://www.eriktse.com/algorithm/1136.htmlM.DifferentBilling签到题,写几个柿子然后枚举B或C即可。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;signedmain(){ ios::sync_with_stdio(......
  • CF1477F Nezzar and Chocolate Bars 题解
    题意:有一根长为\(1\)的巧克力,已经被切了\(m-1\)刀被分成\(m\)分,接下来每次在整根长度为\(1\)的巧克力上均匀随机一个点切一刀,求每一小段巧克力长度均小于一个给定值\(K\)需要的期望次数。引理:Irwin-Hall分布:对于\(n\)个在\([0,1]\)内均匀分布的实数随机变量,它们......
  • 4 月 30 日测试题解
    4月30日测试题解T1\({\color{green}{\text{100pts}}}\text{/100pts}\)题意一个无限长宽的棋盘,给出起点\(s\)和终点\(t\),行走方式是象棋中马的走法,问最少需要走多少步。对于\(100\%\)的数据,\(|x_s|,|y_s|,|x_t|,|y_t|\le10^7\)。思路\(\text{100pts}\)首先,坐......
  • 【题解】P3338 [ZJOI2014]力
    题目描述给出\(n\)个数\(q_1,q_2,\dotsq_n\),定义\[F_j~=~\sum_{i=1}^{j-1}\frac{q_i\timesq_j}{(i-j)^2}~-~\sum_{i=j+1}^{n}\frac{q_i\timesq_j}{(i-j)^2}\]\[E_i~=~\frac{F_i}{q_i}\]对\(1\leqi\leqn\),求\(E_i\)的值。\(1\le......
  • [P5785 [SDOI2012]任务安排] 题解
    P5785[SDOI2012]任务安排题目描述分析很明显是一个dp我们不妨设\(dp[i]\)表示枚举到\(i\)的最小费用\(t[i]\)表示加工完第\(i\)个任务所用的总时间,也就是\(T[i]\)的前缀和由于每一批任务前都要一个时间为\(s\)的开机工作我们不妨把每一个这样的\(s\)秒提出来,则这\(s\)秒都......
  • CF1624G 题解
    前言题目传送门!更好的阅读体验?比较好玩的二进制题目。思路答案最小,也就是说较高位要尽可能小。所以很容易想到从最高位开始枚举。第\(i\)位为\(0\),等价于选出的所有边的第\(i\)位都为\(0\)。同时,由于我们是贪心,如果之前枚举过的第\(j\)位可以是\(0\),那么这两个条件......