昨天的CF心态又打崩了
好久没写DP了这道题一发过了
但是大家都会qwq
烦死
Problem - C1 - Codeforces
题意:
给定一个序列,让你找出一个子序列
使得
这个最大,a是子序列
思路:
首先子序列,自然就是DP
然后每个数有两种状态:被减或者被加
还有一个特殊条件:ai<=n
因此状态可以这么设计:
设dp[ai][0/1]表示以ai为结尾的子序列的最大价值,其中0代表ai被减,1代表ai被加
但是这样很容易就变成n^2的
因此需要哈希一下
维护一下前缀作为+的最大值和前缀作为-的最大值
然后就可以转移了
Code: