本题属于典型的“划分型动态规划”。将所有满足条件的子序列按其“最后一个元素所在位置”进行划分:对每个位置 i,统计所有以 a[i] 作为末尾元素且长度为 j 的交替子序列数量,最后把长度为 k 的各部分相加即为答案。
设
dp[i][j] = 以位置 i 结尾、长度恰为 j 的交替子序列数量。
则有:
dp[i][1] = 1(只选 a[i] 这个长度为 1 的子序列)。给定一个长度为 n 的整数数组 a=[a1,a2,…,an],统计从中选出长度恰为 k 的交替子序列的方案数。
输出一个整数,表示满足条件的长度为 k 的交替子序列的方案数。
输入
5 3
3 -1 2 -2 4
输出
5
说明 满足条件的长度为 3 的交替子序列共有 5 个: [3,−1,2], [3,−1,4], [3,−2,4], [−1,2,−2], [2,−2,4]。
输入
3 2
1 1 -1
输出
2
说明 长度为 2 的交替子序列必须相邻乘积 <0。 有两个 [1,−1] 合法
开通会员即可查看完整视频题解: 1.题目讲解 2.思路分析 3.逐行代码手写
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册