百度之星2017 HDU 6114 Chess 组合数学
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 组合数学相关推荐
- HDU 6114 Chess 【组合数】(2017百度之星程序设计大赛 - 初赛(B))
Chess Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- 2017百度之星初赛:B-1001. Chess
Chess Accepts: 1805 Submissions: 5738 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768 ...
- 【百度之星2017】资格赛-题3-度度熊与邪恶大魔王
题目 Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻 ...
- 【比赛】百度之星2017 复赛
第一题 模拟送分. #include<cstdio> #include<cstring> #include<cctype> #include<cmath> ...
- 百度之星 2017初赛第一场 1005 今夕何夕
今夕何夕 Accepts: 1345 Submissions: 5533 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32 ...
- 百度之星2017资格赛1003 度度熊与邪恶大魔王
Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...
- 【原创】【百度之星2017资格赛1003】度度熊与邪恶大魔王
度度熊与邪恶大魔王 Accepts: 3107 Submissions: 19305 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 3276 ...
- 百度之星2017资格赛 1003 度度熊与邪恶大魔王 完全背包
定义状态dp[i][j][t]代表前i种攻击,当前怪物生命值为j,防御力为t,所需要的最小代价. 利用完全背包的方法很容易得到 (p[i] = 第i种方法的攻击值减去防御值t) dp[i][j][t] ...
- 百度之星2017资格赛T3 度度熊与邪恶大魔王 背包
Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...
最新文章
- ACL 2020今日放榜,779篇论文被接收,姚班校友陈丹琦首日演讲
- Unity中sharedMaterials 和 materials
- 集体终止合作 航空代理模式走投无路背后
- 水文-接口和抽象类有什么不同
- python冒泡排序函数_python冒泡排序-Python,冒泡排序
- fib函数用python编写_Python中利用函数装饰器实现备忘功能
- QQ for Linux 复活,微信 for Linux 还远吗?
- WPF中两个窗口的互斥
- 1010 Radix (25 分) 超级坑恶魔坑
- 【zotero】异常与错误,Attachments skipped because they are top-level items,snapshots,an avoided filetype解决方法
- [互联网]互联网公司的种类
- 十大战略工具(10)—— 商业模式画布
- 【转载】为什么用交叉线而不是直通线连接相同的设备
- 泰戈尔《园丁集》选段
- Python不是内部或外部命令的(完美解决)
- 2021 安装centos
- 独享云虚拟主机和云服务器,共享虚拟主机和独享虚拟主机的区别
- 线性回归、logistic回归、广义线性模型——斯坦福CS229机器学习个人总结(一)
- knockout入门(一)
- 定义一个函数,求一组整数的最大值和最小值。(冒泡法)
热门文章
- 网盘下载速度太慢的话请看这里!
- 强固型宽温AM5728监测高铁受电弓视频方案评估
- 四年级计算机考试反思,小学四年级信息技术考试质量分析报告
- 【浙江大学】一个开源的知识图谱表示学习框架
- 计算机和影视结合专业,计算机专业专业建设总结与典型案例2.5微电影拍摄与后期制作(影视拍摄与后期制作技术)课....
- 拷贝相关器 matlab,基于MELP的水下实时语音通信机的研究与实现
- 视频直播技术详解之直播云SDK性能测试模型
- Android多窗口模式(分屏模式)
- Access to XMLHttpRequest at ‘http://localhost:8081/api/account/doLogin‘ from origin ‘http://localhos
- 在UE4中实现撤销(Undo)和重做(Redo)功能