Chess

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6114

Description

車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子。一天,小度在棋盘上摆起了许多車……他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻击的方案数。他经过思考,得出了答案。但他仍不满足,想增加一个条件:对于任何一个車A,如果有其他一个車B在它的上方(車B行号小于車A),那么車A必须在車B的右边(車A列号大于車B)。
现在要问问你,满足要求的方案数是多少。

Input

第一行一个正整数T,表示数据组数。
对于每组数据:一行,两个正整数N和M(N<=1000,M<=1000)。

Output

对于每组数据输出一行,代表方案数模1000000007(1e9+7)。

Sample Input

1
1 1

Sample Output

1


题意

题目不难读=-=

题解

可以考虑使用动态规划:记dp[i][j]为第i行j列往右(包括第j列)合法的方案数,然后从后往前递推:dp[i][j]=dp[i][j+1]+dp[i+1][j+1]即可

再看看这个式子是不是似曾相识=-=下面进行一下讨论

首先,我们只考虑N<=M的情形(因为N>M的情形可以通过转置得到),那么最大放置数就是N个

事实上,由于每一列只能放一个,所以我们可以用每一行中棋子所放置的列来记录当前位置,因此得到一个排列{aN},并且满足:a1<a2<...<aN-1<aN,并且可知{aN}的个数即为所求

从M个数中抽取出N个数,有C(M,N)中选择方法,抽取出来后,按照升序排列,故排列是可以与上述的一个{aN}一一对应的,为此,总共所需的方案数是C(M,N)

【一开始考虑的dp=-=后来发现自己真真真真是个智障】

代码

 1 //HDU-6114 copyright:scidylanpno
 2 #include<bits/stdc++.h>
 3 using namespace std;
 4
 5 typedef long long ll;
 6 const int MAXN = 1000+10;
 7 const ll MOD = 1e9+7;
 8     ll dp[MAXN][MAXN];
 9 ll ans(int N,int M)
10 {
11     memset(dp,0,sizeof dp);
12     dp[N][M]=1;
13     for(int j=M-1;j>0;j--)    dp[N][j]=dp[N][j+1]+1;
14     for(int i=N-1,j;i>0;i--)
15     {
16
17         for(j=M-1;j>0;j--)
18         {
19             dp[i][j]=(dp[i][j+1]+dp[i+1][j+1])%MOD;
20         }
21     }
22     return dp[1][1];
23 }
24
25 void Run()
26 {
27     int m,n;
28     scanf("%d%d",&m,&n);
29     printf("%lld",ans(min(m,n),max(m,n)));
30 }
31
32 int main()
33 {
34     int T;
35     scanf("%d",&T);
36     while(T--)
37     {
38         Run();
39         printf("\n");
40     }
41     return 0;
42 }


题解链接:http://www.cnblogs.com/scidylanpno/p/7355314.html

版权所有:scidylanpno

转载于:https://www.cnblogs.com/scidylanpno/p/7355314.html

百度之星2017 HDU 6114 Chess 组合数学相关推荐

  1. HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))

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

  2. 2017百度之星初赛:B-1001. Chess

    Chess  Accepts: 1805  Submissions: 5738  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32768 ...

  3. 【百度之星2017】资格赛-题3-度度熊与邪恶大魔王

    题目 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻 ...

  4. 【比赛】百度之星2017 复赛

    第一题 模拟送分. #include<cstdio> #include<cstring> #include<cctype> #include<cmath> ...

  5. 百度之星 2017初赛第一场 1005 今夕何夕

    今夕何夕  Accepts: 1345  Submissions: 5533  Time Limit: 2000/1000 MS (Java/Others)  Memory Limit: 32 ...

  6. 百度之星2017资格赛1003 度度熊与邪恶大魔王

    Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...

  7. 【原创】【百度之星2017资格赛1003】度度熊与邪恶大魔王

    度度熊与邪恶大魔王 Accepts: 3107 Submissions: 19305 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3276 ...

  8. 百度之星2017资格赛 1003 度度熊与邪恶大魔王 完全背包

    定义状态dp[i][j][t]代表前i种攻击,当前怪物生命值为j,防御力为t,所需要的最小代价. 利用完全背包的方法很容易得到 (p[i] = 第i种方法的攻击值减去防御值t) dp[i][j][t] ...

  9. 百度之星2017资格赛T3 度度熊与邪恶大魔王 背包

    Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...

最新文章

  1. ACL 2020今日放榜,779篇论文被接收,姚班校友陈丹琦首日演讲
  2. Unity中sharedMaterials 和 materials
  3. 集体终止合作 航空代理模式走投无路背后
  4. 水文-接口和抽象类有什么不同
  5. python冒泡排序函数_python冒泡排序-Python,冒泡排序
  6. fib函数用python编写_Python中利用函数装饰器实现备忘功能
  7. QQ for Linux 复活,微信 for Linux 还远吗?
  8. WPF中两个窗口的互斥
  9. 1010 Radix (25 分) 超级坑恶魔坑
  10. 【zotero】异常与错误,Attachments skipped because they are top-level items,snapshots,an avoided filetype解决方法
  11. [互联网]互联网公司的种类
  12. 十大战略工具(10)—— 商业模式画布
  13. 【转载】为什么用交叉线而不是直通线连接相同的设备
  14. 泰戈尔《园丁集》选段
  15. Python不是内部或外部命令的(完美解决)
  16. 2021 安装centos
  17. 独享云虚拟主机和云服务器,共享虚拟主机和独享虚拟主机的区别
  18. 线性回归、logistic回归、广义线性模型——斯坦福CS229机器学习个人总结(一)
  19. knockout入门(一)
  20. 定义一个函数,求一组整数的最大值和最小值。(冒泡法)

热门文章

  1. 网盘下载速度太慢的话请看这里!
  2. 强固型宽温AM5728监测高铁受电弓视频方案评估
  3. 四年级计算机考试反思,小学四年级信息技术考试质量分析报告
  4. 【浙江大学】一个开源的知识图谱表示学习框架
  5. 计算机和影视结合专业,计算机专业专业建设总结与典型案例2.5微电影拍摄与后期制作(影视拍摄与后期制作技术)课....
  6. 拷贝相关器 matlab,基于MELP的水下实时语音通信机的研究与实现
  7. 视频直播技术详解之直播云SDK性能测试模型
  8. Android多窗口模式(分屏模式)
  9. Access to XMLHttpRequest at ‘http://localhost:8081/api/account/doLogin‘ from origin ‘http://localhos
  10. 在UE4中实现撤销(Undo)和重做(Redo)功能