zoukankan      html  css  js  c++  java
  • HDU 5568 sequence2 区间dp+大数

    题目链接:

    http://acm.hdu.edu.cn/showproblem.php?pid=5568

    题意:

    求所有长度为k的严格升序子序列的个数。

    题解:

    令dp[i][k]表示以i结尾的长度为k的所有严格升序子序列的个数,则有状态转移:dp[i][k]+=dp[j][k-1](其中,arr[i]>arr[j],并且i>j);

    最后答案为dp[1][k]+...dp[n][k]。

    代码:

     1 import java.util.*;
     2 import java.math.*;
     3 public class Main {
     4     
     5     public static void main(String args[]){
     6         Scanner cin = new Scanner(System.in);
     7         final int maxn=111;
     8         int n,k;
     9         int[] arr=new int[maxn];
    10         
    11         while(cin.hasNext()){
    12             n=cin.nextInt();
    13             k=cin.nextInt();
    14             BigInteger[][] dp=new BigInteger[maxn][maxn];
    15             for(int i=1;i<=n;i++){
    16                 arr[i]=cin.nextInt();
    17             }
    18             for(int i=1;i<=n;i++){
    19                 for(int j=1;j<=n;j++) dp[i][j]=BigInteger.ZERO;
    20             }
    21             for(int i=1;i<=n;i++) dp[i][1]=BigInteger.ONE;
    22             for(int kk=2;kk<=k;kk++){
    23                 for(int i=1;i<=n;i++){
    24                     for(int j=i-1;j>=1;j--){
    25                         if(arr[i]>arr[j]){
    26                             dp[i][kk]=dp[i][kk].add(dp[j][kk-1]);
    27                         }
    28                     }
    29                 }
    30             }
    31             BigInteger ans = BigInteger.ZERO;
    32             for(int i=1;i<=n;i++) ans=ans.add(dp[i][k]);
    33             System.out.println(ans.toString());
    34         }
    35     }
    36 }
  • 相关阅读:
    IDEA开发 Scala 项目
    mvn编译时绕过本地jar去maven仓库下载问题
    三角化(转载)
    分布式文件服务器介绍(转载)
    VSCode 设置侧边栏字体大小
    libLas编译
    OSG编译
    vcpkg.exe安装与应用
    OpenCASCADE编译
    gl2ps编译
  • 原文地址:https://www.cnblogs.com/fenice/p/5486673.html
Copyright © 2011-2022 走看看