【Coderforces 833 B. The Bakery】 线段树+dp

Codeforces 833B题意:把n个数分成k部分,使得每部分价值之和最大。每部分的价值为不同数的个数我们首先知道这题很容易用dp[i][k]  想到是以 i  结尾 前面已经有k部分的方案数那么dp[i][k] &Thin...
摘要由CSDN通过智能技术生成

Codeforces 833B
题意:把n个数分成k部分,使得每部分价值之和最大。每部分的价值为不同数的个数

我们首先知道这题很容易用 d p [ i ] [ k ]    想到是以  i    结尾 前面已经有 k 部分的方案数 那么 d p [ i ] [ k ]    =    max ⁡ ( d p [ i ] [ k − 1 ] , d p [ j ] [ k − 1 ] + n u m [ j + 1 ] [ i ] ) 这样直接跑是 O ( n 2 m ) 的 会 T L E    如果我们把取 max ⁡ x    用一个数组记录下来 那么每次决策就是 O ( 1 ) 的转移 但是这不是类似层次的东西 所以我们可以建一颗线段树 叶子节点的值是  d p [ j ] [ k − 1 ]    +    n u m [ j + 1 ] [ i ] 可是怎么更新 n u m 呢?对于这种不同数的问题 我们很容易想到 p r e 数组 我们不考虑单个的 n u m 我们考虑全局 n u m    每个数字对一段区间的贡献就是  p r e [ i ] , i − 1 这段会加 1 于是更新部分就结束了 就可以开始 q u e r y    了 因为  k − 1 < = j    <    i    所以 j 范围也有了 i 每次要从 k 开始 不然前面不能凑齐 k − 1个 \text{我们首先知道这题很容易用}dp\left[ i \right] \left[ k \right] \,\,\text{想到是以 }i\,\,\text{结尾 前面已经有}k\text{部分的方案数} \\ \text{那么}dp\left[ i \right] \left[ k \right] \,\,=\,\,\max \left( dp\left[ i \right] \left[ k-1 \right] ,dp\left[ j \right] \left[ k-1 \right] +num\left[ j+1 \right] \left[ i \right] \right) \\ \text{这样直接跑是}O\left( n^2m \right) \text{的 会}TLE\,\,\text{如果我们把取}\max x\,\,\text{用一个数组记录下来} \\ \text{那么每次决策就是}O\left( 1 \right) \text{的转移 但是这不是类似层次的东西} \\ \text{所以我们可以建一颗线段树} \\ \text{叶子节点的值是 }dp\left[ j \right] \left[ k-1 \right] \,\,+\,\,num\left[ j+1 \right] \left[ i \right] \\ \text{可是怎么更新}num\text{呢?对于这种不同数的问题} \\ \text{我们很容易想到}pre\text{数组 我们不考虑单个的}num \\ \text{我们考虑全局}num\,\,\text{每个数字对一段区间的贡献就是 }pre\left[ i \right] ,i-\text{1 这段会加}1 \\ \text{于是更新部分就结束了 就可以开始}query\,\,\text{了 因为 }k-1<=j\,\,<\,\,i\,\,\text{所以}j\text{范围也有了} \\ i\text{每次要从}k\text{开始 不然前面不能凑齐}k-\text{1个} \\ 我们首先知道这题很容易用dp[i][k]想到是以 i结尾 前面已经有k部分的方案数那么dp[i][k]=max(dp[i][

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值