1002-排列组合
2015-11-22 23:28
381 查看
这题习惯性用搜索了,明明知道会超时,依然用了搜索...没想过排列组合这种做法
先选行:有Cn,m种做法,再选列:并可交换有An,m
所以总共有An,m*Cn,m种方式。
题目大意:
会长大人由于经常不玩象棋,于是把象棋充公了~奇怪的是象棋里面没有象(这是为什么呢?象棋没有象还怎么玩啊),不过不要紧,我们还有车!
好吧,上次马被玩坏了,这次来玩车(本来这次玩象,可是会长表示并不想把“对象”借我们玩⊙﹏⊙),象棋里的车,它能竖着走,还能横着走,但是当它遇到处于同行同列的车的时候,这两个车就产生了冲突,给定两个整数n和k,代表n*n的棋盘,和k个车,问你有多少种摆放,使任意两个车都没有冲突。
对于每一组,输入两个整数n,k;代表n*n的棋盘,k个车;n<=30,k <=n^2
hint:数据保证不会超出unsigned long long int
[/code]
先选行:有Cn,m种做法,再选列:并可交换有An,m
所以总共有An,m*Cn,m种方式。
题目大意:
会长大人由于经常不玩象棋,于是把象棋充公了~奇怪的是象棋里面没有象(这是为什么呢?象棋没有象还怎么玩啊),不过不要紧,我们还有车!
好吧,上次马被玩坏了,这次来玩车(本来这次玩象,可是会长表示并不想把“对象”借我们玩⊙﹏⊙),象棋里的车,它能竖着走,还能横着走,但是当它遇到处于同行同列的车的时候,这两个车就产生了冲突,给定两个整数n和k,代表n*n的棋盘,和k个车,问你有多少种摆放,使任意两个车都没有冲突。
Input
一行输入一个T(T<=1000000),代表测试数据组数。对于每一组,输入两个整数n,k;代表n*n的棋盘,k个车;n<=30,k <=n^2
Output
输出:对于每组数据,输出ans,ans为多少种摆放。hint:数据保证不会超出unsigned long long int
Sample Input
8 1 1 2 4 3 1 4 1 4 2 4 3 4 4 4 5
Sample Output
1 0 9 16 72 96 24 0
#include <iostream> #include <cstdio> #include <cstring> using namespace std; unsigned long long n,k,sum; unsigned long long dp[35][35*35]; int main() { unsigned long long T,i,j; scanf("%llu",&T); memset(dp,0,sizeof(dp)); while(T--) { sum=1; scanf("%llu%llu",&n,&k); if(n<k) { printf("0\n"); continue; } else if(dp [k]) { cout<<dp [k]<<endl; continue; } else { for(i=n;i>=n-k+1;i--) { sum*=i; } unsigned long long sum1=sum; sum=1; for(i=n;i>=n-k+1;i--) { sum=sum*i/(n-i+1); } sum1*=sum; dp [k]=sum1; cout<<sum1<<endl; } } return 0; }
[/code]
相关文章推荐
- SurfaceFlinger启动过程分析(一)、(二)、(三)、(四)【转】
- 1.2字符串包含
- (转载)验证方法学的历史及比较
- 217. Contains Duplicate
- Xcode快捷键
- 文章标题
- 014--VS2013 C++ c++定时动画
- [转]UDP/TCP穿越NAT的P2P通信方法研究(UDP/TCP打洞 Hole Punching)
- 文档之电子公司的物料管理分析方案
- 黑马程序员——冒泡排序、选择排序、二分查找的实例运用分析
- JavaScript的深拷贝和浅拷贝
- 异常基础
- Android之自定义组件
- 欢迎使用CSDN-markdown编辑器
- 从大数据菜鸟走上大师的历程 第三讲:Tuple Array Map
- 线程问题
- 内核升级导致磁盘组无法挂载
- ThinkPHP 的URL重写时遇到No input file specified的解决方法
- vs项目属性路径配置
- 学习笔记15-OCFoundation框架(一)