HDU 4832 Chess (动态规划+组合数学)
来源:互联网 发布:linux无损调整分区大小 编辑:程序博客网 时间:2024/05/30 05:21
关键点是行和列是独立的。
移动K步可以视为x方向移动i步(y向不动),y方向移动K-i步(x向不动)。分别预处理出x和y方向上移动i和K-i步时的种数,然后使用排列组合枚举i。相乘即可。
注意,计算组合数时可能使用了除法这将使模运算出错。
#include<iostream>#include<cstdio>#include<cstring>#include<vector>#include<cmath>#include<map>#include<string>#include<set>#include<queue>#include<algorithm>using namespace std;typedef long long LL;const int maxn=1010;const LL mod=9999991;LL C[maxn][maxn];LL dp1[maxn][maxn],dp2[maxn][maxn];LL dp[maxn][maxn];const int mv[4]= {1,2,-1,-2};void init(){ C[0][0]=1; for(int i=1; i<=1000; ++i) { C[i][0]=C[i-1][0]; for(int j=1; j<=i; ++j) { C[i][j]=C[i-1][j-1]+C[i-1][j]; C[i][j]%=mod; } }}int main(){ init(); int T,kase=0; scanf("%d",&T); while(T--) { int n,m,K,x,y; scanf("%d%d%d%d%d",&n,&m,&K,&x,&y); memset(dp1,0,sizeof(dp1)); memset(dp2,0,sizeof(dp2)); memset(dp,0,sizeof(dp)); dp1[0][0]=dp1[0][x]=1; for(int i=1; i<=K; ++i) { for(int j=1; j<=n; ++j) { for(int k=0; k<4; ++k) { int s=j+mv[k]; if(1<=s&&s<=n) dp1[i][j]+=dp1[i-1][s]; dp1[i][j]%=mod; } dp1[i][0]+=dp1[i][j]; dp1[i][0]%=mod; } } dp2[0][0]=dp2[0][y]=1; for(int i=1; i<=K; ++i) { for(int j=1; j<=m; ++j) { for(int k=0; k<4; ++k) { int s=j+mv[k]; if(1<=s&&s<=m) dp2[i][j]+=dp2[i-1][s]; dp2[i][j]%=mod; } dp2[i][0]+=dp2[i][j]; dp2[i][0]%=mod; } } LL ans=0; for(int i=0; i<=K; ++i) { int j=K-i; ans+=C[K][i]*dp1[i][0]%mod*dp2[j][0]%mod; ans%=mod; } printf("Case #%d:\n%I64d\n",++kase,ans); } return 0;}
0 0
- HDU 4832 Chess (动态规划+组合数学)
- HDU 6114 Chess【组合数学】
- HDU 6114 Chess(组合数学)
- BZOJ1925【动态规划】【组合数学】
- hdu 4405 Aeroplane chess 动态规划
- HDU 5794 A Simple Chess(组合数学+dp)
- 走格子(数学组合/动态规划)
- BZOJ_P3997 [TJOI2015]组合数学(动态规划)
- 【HDU 3208】 组合数学+动态规划 湫秋系列故事——安排座位
- HDOJ 题目4832 Chess(DP,组合数学)
- HDU 4532 组合数+动态规划
- BZOJ2302: [HAOI2011]Problem c|动态规划|组合数学
- Bzoj2111:[ZJOI2010]Perm 排列计数:树形动态规划+组合数学
- LightOJ 1005 Rooks 动态规划dp || 组合数学
- 51nod 1202 子序列个数 (组合数学 +动态规划)
- uva11538 Chess Queen(组合数学)
- UVa 11538 - Chess Queen (组合数学)
- 【bzoj1801】【AHOI2009】【chess中国象棋】【组合数学】
- Markdown入门
- SVProgressHUD
- MyBatis实战篇——实现数据的增删改查
- 电阻等常用封装分析
- Eclipse搭建SSH(Struts2+Spring3+Hibernate3)框架项目教程
- HDU 4832 Chess (动态规划+组合数学)
- CALayer
- socket实现一对一通讯
- AddressBookUI
- win8.1下matlab R2013a的help browser 显示格式不正确,无法copy
- 涂鸦板
- 共享库的概念
- Objective-c单例模式的正确写法
- 如得此女,夫复何求