标签:logs list linker center play not for cas seve
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 513 Accepted Submission(s): 319
题目链接:
http://acm.hdu.edu.cn/showproblem.php?pid=6114
题目大意:
NxM的棋盘放最多的象棋中的车,保证下方的车一定在右侧,求方案数。
题目思路:
【组合数】
首先可知必须放min(n,m)个车。
由于必须靠右侧放,所以等于无序的一个排列。
其实就是求C(n,m)
n<m交换n,m
1 /**************************************************** 2 3 Author : Coolxxx 4 Copyright 2017 by Coolxxx. All rights reserved. 5 BLOG : http://blog.csdn.net/u010568270 6 7 ****************************************************/ 8 #include<bits/stdc++.h> 9 #pragma comment(linker,"/STACK:1024000000,1024000000") 10 #define abs(a) ((a)>0?(a):(-(a))) 11 #define lowbit(a) (a&(-a)) 12 #define sqr(a) ((a)*(a)) 13 #define mem(a,b) memset(a,b,sizeof(a)) 14 const double EPS=0.00001; 15 const int J=10; 16 const int MOD=1000000007; 17 const int MAX=0x7f7f7f7f; 18 const double PI=3.14159265358979323; 19 const int N=1004; 20 const int M=1004; 21 using namespace std; 22 typedef long long LL; 23 double anss; 24 LL aans; 25 int cas,cass; 26 int n,m,lll,ans; 27 int c[N][N]; 28 void init() 29 { 30 int i,j; 31 c[1][0]=c[1][1]=1; 32 for(i=2;i<N;i++) 33 { 34 c[i][0]=1; 35 for(j=1;j<=i;j++) 36 c[i][j]=(c[i-1][j]+c[i-1][j-1])%MOD; 37 } 38 } 39 int main() 40 { 41 #ifndef ONLINE_JUDGE 42 // freopen("1.txt","r",stdin); 43 // freopen("2.txt","w",stdout); 44 #endif 45 int i,j,k; 46 int x,y,z; 47 // for(scanf("%d",&cass);cass;cass--) 48 init(); 49 for(scanf("%d",&cas),cass=1;cass<=cas;cass++) 50 // while(~scanf("%d",&n)) 51 { 52 scanf("%d%d",&n,&m); 53 if(n<m)swap(n,m); 54 printf("%d\n",c[n][m]); 55 } 56 return 0; 57 } 58 /* 59 // 60 61 // 62 */
HDU 6114 Chess 【组合数】(2017"百度之星"程序设计大赛 - 初赛(B))
标签:logs list linker center play not for cas seve
原文地址:http://www.cnblogs.com/Coolxxx/p/7389065.html