Cho danh sách số nums và số nguyên k. Đếm số dãy con (subsequence) kích thước k tăng chặt (strictly increasing). Kết quả modulo 10⁹+7.
Ví dụ: nums = [2,3,4,1], k=2 → các dãy con: [2,3], [3,4], [2,4] → kết quả 3.
Giải thuật (DP lặp k lần)
dp[i]= số dãy con tăng kết thúc tạiivới độ dài hiện tại.- Khởi tạo
dp = [1]*n(độ dài 1). - Lặp
k-1lần mở rộng độ dài:- Duyệt
jtừn-1xuống 0: resetdp[j]=0, cộng dồndp[i]cho mọiivới nums[i] < nums[j].
- Duyệt
- Kết quả =
sum(dp) % MOD.
Mã nguồn Python
class Solution:
def solve(self, nums, k):
MOD = 10**9 + 7
dp = [1] * len(nums)
for _ in range(k - 1):
for j in range(len(dp) - 1, -1, -1):
dp[j] = 0
for i in range(j):
if nums[i] < nums[j]:
dp[j] = (dp[j] + dp[i]) % MOD
return sum(dp) % MOD
ob = Solution()
nums = [2, 3, 4, 1]
k = 2
print(ob.solve(nums, k)) # Output: 3
Đầu vào
[2, 3, 4, 1], 2
Đầu ra
3