HDU 4832 Chess

思路:把行列的情况分别dp求出来,然后枚举行用几行。竖用几行,然后相乘累加起来就是答案
代码:

#include <stdio.h>
#include <string.h>
#include <iostream>
using namespace std;typedef long long ll;const ll MOD = 9999991;
const int N = 1005;
int t, n, m, k, x, y;
ll dp1[N][N], dp2[N][N], C[N][N];int main() {for (int i = 0; i <= 1000; i++) {C[i][0] = C[i][i] = 1;for (int j = 1; j < i; j++) {C[i][j] = (C[i - 1][j - 1] + C[i - 1][j]) % MOD;}}int cas = 0;scanf("%d", &t);while (t--) {scanf("%d%d%d%d%d", &n, &m, &k, &x, &y);memset(dp1, 0, sizeof(dp1));memset(dp2, 0, sizeof(dp2));dp1[0][x] = dp2[0][y] = 1;for (int i = 1; i <= k; i++) {for (int j = 1; j <= n; j++) {if (j >= 2) dp1[i][j] = (dp1[i][j] + dp1[i - 1][j - 2]) % MOD;if (j >= 1)dp1[i][j] = (dp1[i][j] + dp1[i - 1][j - 1]) % MOD;dp1[i][j] = (dp1[i][j] + dp1[i - 1][j + 1]) % MOD;dp1[i][j] = (dp1[i][j] + dp1[i - 1][j + 2]) % MOD;}}for (int i = 1; i <= k; i++) {for (int j = 1; j <= m; j++) {if (j >= 2) dp2[i][j] = (dp2[i][j] + dp2[i - 1][j - 2]) % MOD;if (j >= 1)dp2[i][j] = (dp2[i][j] + dp2[i - 1][j - 1]) % MOD;dp2[i][j] = (dp2[i][j] + dp2[i - 1][j + 1]) % MOD;dp2[i][j] = (dp2[i][j] + dp2[i - 1][j + 2]) % MOD;}}ll heng[N], shu[N];memset(heng, 0, sizeof(heng));memset(shu, 0, sizeof(shu));for (int i = 1; i <= n; i++)for (int kk = 0; kk <= k; kk++)heng[kk] = (heng[kk] + dp1[kk][i]) % MOD;for (int i = 1; i <= m; i++)for (int kk = 0; kk <= k; kk++)shu[kk] = (shu[kk] + dp2[kk][i]) % MOD;ll ans = 0;for (int i = 0; i <= k; i++) {ans = (ans + (heng[i] * shu[k - i] % MOD) * C[k][i] % MOD) % MOD;}printf("Case #%d:\n", ++cas);cout << ans << endl;}return 0;
}

转载于:https://www.cnblogs.com/ldxsuanfa/p/10009395.html

HDU 4832(DP+计数问题)相关推荐

  1. HDU 4832 Chess 排列组合 DP

    Chess Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  2. HDU 5928 DP 凸包graham

    给出点集,和不大于L长的绳子,问能包裹住的最多点数. 考虑每个点都作为左下角的起点跑一遍极角序求凸包,求的过程中用DP记录当前以j为当前末端为结束的的最小长度,其中一维作为背包的是凸包内侧点的数量.也 ...

  3. hdu 1171 dp(多重背包)

    View Code //hdu 1171 dp(多重背包)//题意:把所有物品的价值尽量分为相等的两份,不能等分的话 //后面那份可以稍小于前面的 //求出价值总和后,令价值的一半为背包容量,让背包尽 ...

  4. hdu 5086(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5086 题目大意:给出长度为n的数组,然后要求累计里面的每个子串的和. 解题思路:这道题直接枚举肯定不行 ...

  5. hdu 2059(dp)

    龟兔赛跑 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Problem Des ...

  6. HDU 3646 DP + 二分

    链接:http://acm.hdu.edu.cn/showproblem.php?pid=3646 题意:你有N把武器,每把武器可以对敌人造成一定的伤害(et:攻击力500,敌人血量为200,杀死敌人 ...

  7. Hdu 4293 DP

    题意: n个人说自己前面有多少人 后面有多少人 求出说真话人数最多的情况 每个样例有 一个 n 表示n个人 接下来 n 行有a b 表示他前面的人数和后面的人数 思路: 如果已经知道了其中一组的人数~ ...

  8. hdu 3905(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3905 思路:dp[i][j]表示前i分钟,睡了j分钟收获的的最大价值,并记tmp_dp[i][j]为从 ...

  9. hdu 4472 dp

    http://acm.hdu.edu.cn/showproblem.php?pid=4472 第一直觉找规律,第二直觉 把树拆成子树,然后递推或者DP 然后发现不行,然后才发现自己题都没读,,,, d ...

最新文章

  1. unix网络编程 ubuntu下搭建环境编译源码
  2. 用oc/c编写冒泡排序
  3. 揭秘微信「看一看」如何精准挖掘你感兴趣的内容
  4. 编译原理(二)之语法分析
  5. 解决虚拟机VMware安装CentOS7.0识别不到网卡
  6. cod16 服务器正在维护,使命召唤16玩不了怎么办 使命召唤16进不去解决方法
  7. 设计原则在设计模式的应用
  8. Codeforces Beta Round #97 (Div. 1) C. Zero-One 数学
  9. 43特征01——特征值、特征向量、特征值与特征向量的判定、矩阵与线性变换的特征关系、方阵的迹、特征多项式、Hamilton-Cayley 定理、特征值和特征向量基本性质、谱分解、奇异值分解
  10. sqlserver的文件导入到mysql_SQLServer数据导入到MySQL方法介绍
  11. Hadoop入门集群环境搭建
  12. 苹果MacBook iMac免光驱安装win7方法
  13. 从NLP任务中文本向量的降维问题,引出LSH(Locality Sensitive Hash 局部敏感哈希)算法及其思想的讨论...
  14. [Arch]常用软件安装使用
  15. 微信、手Q、QQ浏览器userAgent记录
  16. 霍夫变换c语言程序,霍夫变换 | Cauthy's Blog
  17. 更改Windows鼠标滑轮滚动方向
  18. z-index细解:一个z-index的值很大为何却在一个很小的值下面?
  19. 【Wireshark系列十】wireshark怎么抓包、wireshark抓包详细图文教程
  20. 北疆蓝盾 新城区消防大队开展住宅小区消防通道、电动车专项治理行动

热门文章

  1. 基于设计模式的学习之旅-----访问者模式(附源码)
  2. 慢慢学Linux驱动开发,第十章,GNU C的扩展
  3. mysql为什么要压测_mysql集群压测的详细介绍
  4. Winograd,GEMM算法综述(CNN中高效卷积实现)(下)
  5. php如何对数组进行分组,如何在PHP中对数组进行分组排序
  6. python格式化html库_用Python格式化HTML代码
  7. 站覆盖范围_你了解无线覆盖范围和穿墙能力吗?别再走进这些误区了
  8. dblink oracle mysql,Oracle dblink的使用
  9. 动态图相册 android,‎App Store 上的“动态图相册”
  10. 基于oracle的数据系统,基于Oracle 的数据库系统