各种各样的DP记录

7717 jump

Description
在这里插入图片描述

Input
在这里插入图片描述

Output
在这里插入图片描述

Sample Input
2
3 4
10 -100 80
15 400000000
-100 1 2 3 4 5 6 7 8 9 10 11 12 13 14

Sample Output
90
41999999900

Data Constraint
在这里插入图片描述

Solution

直观的想法是每次选择一个最大的子段和,反复横跳。
但是样例1似乎并不能这样做,因为一开始跳不过去。

所以应该是这样的,先跳到一个点r1,然后反复拿区间[l1,r1]的和,直到和能够从l1跳到一个新的r2,再反复拿[l2,r2]的和。

可以这样DP,设dp(i)表示走到i时,下一步应该往左跳,此时最少需要经过多少步,且当前和是多少。
转移时枚举上一个段的结尾j在哪里,看看需要至少跳多少次才能跳回i

7729 b

Description
在这里插入图片描述

Input
在这里插入图片描述

Output
一个整数表示答案。

Sample Input
10
3122 53425 1234214 653455 32412 1234 2432 3421 3543132

Sample Output
136795160

Data Constraint
在这里插入图片描述

在这里插入图片描述

Solution
读错题了,以为很难。
对每个x,设f(i,j,k)表示考虑了前i轮结束后,剩余j个数小于x,j个数大于x
转移非常直接。
考虑到i和j知道的情况下,k已经确定,所以优化成二维状态。

7724 subset

Description
在这里插入图片描述

Input
在这里插入图片描述

Output
在这里插入图片描述

Sample Input
3
3 5 2
2 5 3
6 0 2
1 1 4 5 1 4
7 10 3
1 9 1 9 8 1 0

Sample Output
64
2268

Data Constraint

在这里插入图片描述

Solution
每个子集的贡献与自己的大小有关,都为k^(|s|-|t|)
考虑朴素dp,设f(i,j,k)表示前i个数选了j个,和为k的方案数。
朴素转移复杂度会比较高。
不妨边dp边计算答案。
设f(i,j)表示前i个数,和为j的集合的总贡献是多少。
考虑下一个数选或者不选,如果选,则说明总集合变大,则贡献为k,否则原封不动转移即可。
很强很强很强的dp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值