1 条题解
-
0
问题本质
构造波浪序列 ,满足:
- 相邻元素不等且增减交替
核心思路:动态规划
状态定义
dp[i][j][0/1]- 总和为i,最后一个数为j,最后一步是下降(0)/上升(1)的方案数状态转移
-
从下降状态(下一步必须上升):
dp[i+j][j][1] += dp[i][x][0]对所有x > j -
从上升状态(下一步必须下降):
dp[i+j][j][0] += dp[i][x][1]对所有x < j
关键优化
使用前缀和将转移复杂度从 降为 :
- 维护
prefix[i][j] = Σ dp[i][1..j][0] - 维护
suffix[i][j] = Σ dp[i][j..n][1]
算法步骤
- 初始化
dp[k][k][0] = dp[k][k][1] = 1 - 按总和
i从小到大计算 DP - 使用前缀和数组优化转移
- 答案 =
复杂度
- 时间复杂度:
- 空间复杂度:
实现要点
- 模 运算
- 注意单天计划
[k]是合法序列 - 利用前缀和避免重复计算
- 1
信息
- ID
- 5512
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 1
- 已通过
- 1
- 上传者