你有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个,并非相同位 置选出)

n = int(input()) seq = [int(i) for i in input().split()] order_seq_length = [1]*n mod = 1000000007 solutions = 0 max_len = 0 max_len_end = -1  for i in range(n):     cur = seq[i]     max_len_at_left = 0     for k in range(i-1,-1,-1):         if seq[k] < cur:             max_len_at_left = max(max_len_at_left, order_seq_length[k])             break     order_seq_length[i] = max_len_at_left+1     if max_len < order_seq_length[i]:         max_len = order_seq_length[i]         max_len_end = i  for i in range(max_len_end, n):     cur_solutions = 0     if order_seq_length[i] == max_len:         cur_solutions = 1         max_end_num = seq[i]         cur_len = max_len-1         count = 0         min_max = max_end_num         j = max_len_end         while j >= 0:             if seq[j]<max_end_num and order_seq_length[j] == cur_len:                 count += 1                 min_max = min(min_max, seq[j])                 j-=1             elif seq[j]<max_end_num and order_seq_length[j] == cur_len-1:                 cur_solutions *= max(count,1) % mod                 count = 0                 max_end_num-=min_max                 cur_len-=1             else:                 j -= 1         cur_solutions *= max(count,1) % mod     solutions += cur_solutions % mod print(solutions) 

首先为了检测最长子串长度, 定义数组

order_seq_length 
其代表以当前位置结尾时最长子串长度.
然后从后向前的检测, 对于以一个数字结尾的最长子串有多少种组合方式

26:29

以上就是关于问题你有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个,并非相同位 置选出)