zoukankan      html  css  js  c++  java
  • SGU 269. Rooks(DP)

    题意:

      给n(<=250)条水平网格,然后在上面放k棋子,每行每列都只能放一个。求方法总数。

    Solution:

      简单的DP,

          只要对给出的水平长度排个序就很容易处理了。

       需要用到高精度。

    偷懒用java写了

    import java.util.*;
    import java.math.*;
    public class Solution {
        public static void main(String[] args){
            Scanner cin=new Scanner(System.in);
            int n=cin.nextInt(),k=cin.nextInt();
            int[] a=new int[300];
            BigInteger[][] dp=new BigInteger[300][300];
            for(int i=1;i<=n;++i){
                a[i]=cin.nextInt();
            }
            Arrays.sort(a,1,n+1);
            for(int i=0;i<=250;++i)
                for(int j=0;j<=250;++j)
                    dp[i][j]=BigInteger.ZERO;
    
            dp[0][0]=BigInteger.ONE;
            for(int i=1;i<=n;++i){
                dp[i][0]=dp[i-1][0];
                for(int j=1;j<=i;++j){
                    dp[i][j]=dp[i-1][j].add(dp[i-1][j-1].multiply(BigInteger.valueOf(a[i]-j+1)));
                }
            }
            System.out.println(dp[n][k]);
        }
    }
    View Code
  • 相关阅读:
    linux下base命令
    lldpd-0.7.7代码解读(send_pdu部分)
    openwrt 包makefile
    字符
    AC_CONFIG_HEADER
    大小端
    查看使用了那种shell
    debia下安装libjpeg
    工作流模式 (zhuan)
    1.2.1 工作流管理系统参考模型 (zhuan)
  • 原文地址:https://www.cnblogs.com/keam37/p/4591854.html
Copyright © 2011-2022 走看看