zoukankan      html  css  js  c++  java
  • chess排列组合题 皇星客栈

                                 A.Chess

    Problem Description

    We have a chessboard, as the figure below, it shows the chessboard with dimension 1, 3, 5, 7 (We ignore the even number).Now, your task is to place K bishops on the n – dimension chessboard and satisfied that none of then attack each other ( A bishop can move to any distance in any of the four diagonal directions).

    Input

    输入包含两个整数n(n < 100 & & n % 2 = = 1)和k(k < = 10000)之间用一个空格分开。

    Output

    输出的答案mod 100007.

    Sample Input

    7 3
    1 1
    

    Sample Output

    1038
    1
    第一种方法:
    
    
    View Code
     1 #include<stdio.h>
     2 
     3 __int64 Q[50];
     4 #define mod 100007
     5 
     6 __int64 xiangqi( __int64 n,__int64 k )
     7 {
     8     __int64 i;
     9     __int64 j;
    10     __int64 sum=1;
    11 
    12     for( i = 1; i <= n ; i++ )
    13         Q[i] = i*i;
    14     for( i = k; i >=2 ; i-- )
    15     {    
    16         j = 1;
    17         while( i * j <= n )
    18         {
    19             if( j*i >= n-k+1 && Q[i*j] % i == 0 )
    20             {
    21                 Q[i*j] /= i ;
    22                 break;
    23             }
    24             j++;
    25         }
    26     }
    27     for( i = n ; i >= n-k+1 ; i-- )
    28     {
    29         sum *= Q[i]%mod;
    30         sum %= mod;
    31     }
    32     return sum;
    33 }
    34 
    35     
    36 
    37 int main( )
    38 {
    39     int n;
    40     int k;
    41     int num1;
    42     int num2;
    43     __int64 sum;
    44     int i;
    45 
    46     while( scanf("%d %d",&n,&k) == 2 )
    47     {
    48         
    49         sum = 0;
    50         if( n < 100 && n % 2 == 1 )
    51         {
    52             if( k > n )
    53             { printf("0\n"); continue; }
    54             if( n == 1 )
    55             { printf("1\n"); continue; }
    56             num1 = (n+1)/2;
    57             num2 = num1 - 1;
    58 
    59             for( i = k; i >= 0 ; i-- )
    60             {
    61                 if( i > num1 || k - i > num2 )
    62                     continue;
    63                 sum += xiangqi(num1,i)*xiangqi(num2,k-i)%mod;
    64                 sum %= mod;
    65             }
    66         }
    67         printf("%I64d\n",sum);
    68     }
    69     return 0;
    70 }

       第二种方法 :

    View Code
     1 #include <iostream>
     2 
     3 using namespace std;
     4 #define MOD 100007
     5 int n, k;
     6 __int64 dp[2][101][101];
     7 
     8 void DP( int mod, int n ) {
     9 
    10     int i, j;
    11     for(i = 0; i <= n; i++) {
    12         for(j = 0; j <= n; j++) {
    13             dp[ mod ][i][j] = 0;
    14         }
    15     }
    16     dp[ mod ][0][0] = 1;
    17     for( i = 1; i <= n; i++) {
    18         dp[mod][i][0] = 1;
    19         for(j = 1; j <= n; j++) {
    20             dp[mod][i][j] = dp[mod][i-1][j];
    21             dp[mod][i][j] += dp[mod][i-1][j-1] * ( n - j + 1 ) % MOD;
    22             dp[mod][i][j] %= MOD;
    23         }
    24     }
    25 }
    26 
    27 int main() {
    28     int i;
    29 
    30     /*freopen ("1005.in", "r", stdin );
    31     freopen ("1005.out", "w", stdout );*/
    32 
    33     while( scanf("%d %d", &n, &k) != EOF ) {
    34         DP(0, n/2);
    35         DP(1, n - n/2);
    36 
    37         if( k > n ) {
    38             printf("0\n");
    39             continue;
    40         }
    41 
    42         __int64 sum = 0;
    43         for(i = 0; i <= k; i++) {
    44             if( i > n || k-i > n )
    45                 continue;
    46             sum = sum + ( dp[0][n/2][i] * dp[1][n-n/2][k-i] ) % MOD;
    47             sum %= MOD;
    48         }
    49         printf("%I64d\n", sum);
    50     }
    51     return 0;
    52 }
  • 相关阅读:
    浅谈JavaScript中this指向的⼏种情况
    JavaScript、html简单的级联操作。
    异常处理中throws和throw的区别?
    java异常处理try-catch-finally的执行过程?
    什么是内连接、外连接、交叉连接(笛卡尔积)?
    主键和外键的区别
    集合和数组的比较(为什么要引入集合)?
    Java中对比单继承与多继承的优劣,以及java的解决方案
    数据库
    数据库集中控制的优势
  • 原文地址:https://www.cnblogs.com/huangxingkezhan/p/2645226.html
Copyright © 2011-2022 走看看