你有n个箱子,它们的高度分别为ai,你想要用它们做出一个尽可能长的阶梯。但是你对最长的阶梯长度不感兴趣,你只对其方案数感兴趣。 形式化地,给出长度为n的序列{ai},从中挑选出子序列{bi},满足对所有合法下标i,有bi<bi+1成立(即单调递增)(如果子序列{bi}长度为 1,亦视为满足此条件)。在这些子序列中,长度为最大长度的子序列有多少个? (子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如{2,3,5}是 {1,2,3,4,5}的子序列,而{2,1}和{1,6}不是。 我们认为两个子序列相同,当且仅当所有数都是从相同位置选出来的。而对于序列{1,2,2,6},选择第2个和第4个形成子序列{2,6},选择第 3个和第4个形成子序列{2,6},虽然形式相同但仍视为不同的序列,因为前者的2是原序列中第2个,后者的2是原序列中的第3个,并非相同位 置选出)

区块链毕设网qklbishe.com为您提供问题的解答

你有n个箱子,它们的高度分别为ai,你想要用它们做出一个尽可能长的阶梯。但是你对最长的阶梯长度不感兴趣,你只对其方案数感兴趣。 形式化地,给出长度为n的序列{ai},从中挑选出子序列{bi},满足对所有合法下标i,有bi<bi+1成立(即单调递增)(如果子序列{bi}长度为
1,亦视为满足此条件)。在这些子序列中,长度为最大长度的子序列有多少个? (子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如{2,3,5}是 {1,2,3,4,5}的子序列,而{2,1}和{1,6}不是。
我们认为两个子序列相同,当且仅当所有数都是从相同位置选出来的。而对于序列{1,2,2,6},选择第2个和第4个形成子序列{2,6},选择第 3个和第4个形成子序列{2,6},虽然形式相同但仍视为不同的序列,因为前者的2是原序列中第2个,后者的2是原序列中的第3个,并非相同位 置选出)

import java.util.*;
import java.io.*;

// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
    public static void main(String[] args) throws Exception{
        BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
        Integer n = Integer.parseInt(bf.readLine());
        int[] nums = new int[n];
        String[] str = bf.readLine().split(" ");
        for(int i=0;i<n;i++){
            nums[i]=Integer.parseInt(str[i]);
        }

        //dp[i][j] 以第i个元素结尾,子序列长度为j的方案个数
        //dp[i][j]= nums[k]<nums[i]. +=dp[k][j-1]
        int[][] dp = new int[n+1][n+1];//以第i个元素结尾,子序列长度为j的方案个数
        dp[0][0]=1;
        dp[1][1]=1;
        for(int i=2;i<=n;i++){
            dp[i][1]=1;
            for(int j=2;j<=i;j++){
                for(int k=i-1;k>=1;k–){//k=1
                    if(nums[k-1] < nums[i-1]){
                        dp[i][j] =dp[i][j]+dp[k][j-1];
                    }
                }
            }
        }

        for(int j=n;j>=1;j–){
            int curr=0;
            for(int i=1;i<=n;i++){
                curr+=dp[i][j];
            }
            if(curr>0){
                System.out.println(curr);
                return;
            }
        }

        
    }
}

09:49

以上就是关于问题你有n个箱子,它们的高度分别为ai,你想要用它们做出一个尽可能长的阶梯。但是你对最长的阶梯长度不感兴趣,你只对其方案数感兴趣。 形式化地,给出长度为n的序列{ai},从中挑选出子序列{bi},满足对所有合法下标i,有bi<bi+1成立(即单调递增)(如果子序列{bi}长度为
1,亦视为满足此条件)。在这些子序列中,长度为最大长度的子序列有多少个? (子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如{2,3,5}是 {1,2,3,4,5}的子序列,而{2,1}和{1,6}不是。
我们认为两个子序列相同,当且仅当所有数都是从相同位置选出来的。而对于序列{1,2,2,6},选择第2个和第4个形成子序列{2,6},选择第 3个和第4个形成子序列{2,6},虽然形式相同但仍视为不同的序列,因为前者的2是原序列中第2个,后者的2是原序列中的第3个,并非相同位 置选出)的答案

欢迎关注区块链毕设网-
web3一级市场套利打新赚钱空投教程

区块链NFT链游项目方科学家脚本开发培训

从业7年-专注一级市场


微信:btc9767
TELEGRAM :https://t.me/btcok9

具体资料介绍

web3的一级市场千万收益的逻辑


进群点我



qklbishe.com区块链毕设代做网专注|以太坊fabric-计算机|java|毕业设计|代做平台-javagopython毕设 » 你有n个箱子,它们的高度分别为ai,你想要用它们做出一个尽可能长的阶梯。但是你对最长的阶梯长度不感兴趣,你只对其方案数感兴趣。 形式化地,给出长度为n的序列{ai},从中挑选出子序列{bi},满足对所有合法下标i,有bi<bi+1成立(即单调递增)(如果子序列{bi}长度为 1,亦视为满足此条件)。在这些子序列中,长度为最大长度的子序列有多少个? (子序列:某个序列的子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列。例如{2,3,5}是 {1,2,3,4,5}的子序列,而{2,1}和{1,6}不是。 我们认为两个子序列相同,当且仅当所有数都是从相同位置选出来的。而对于序列{1,2,2,6},选择第2个和第4个形成子序列{2,6},选择第 3个和第4个形成子序列{2,6},虽然形式相同但仍视为不同的序列,因为前者的2是原序列中第2个,后者的2是原序列中的第3个,并非相同位 置选出)