第一篇题解…
今天下午被DP搞懵了,写写题解,帮自己理一下思路,顺便帮助一下同样遇到困难的人hhh
大概的思路和AC代码都放在下面了,代码里还有一些相应的注释。
找出状态转移方程之后就是很简单的问题了。(虽然我也是看了题解才找出来的…
————————————————————————————————————
原题
题意
一组数据,从其中选择一个a[k]删除,同时删除值为a[k]-1和a[k]+1的所有数据。
将a[k]的值加到ans,求最大的ans。
思路
一维DP。
设f[i-1]为从1到i-1可以得到的最大ans,则f[i]只取决于f[i-1]。
由最优化原理,可以使用DP。
如果取i-1,则不能取i;如果不取i-1,则可以取i。
则状态转移方程为:f[i]=max(f[i-1], f[i-2]+i*cnt[i])
cnt[i]为数据i出现的次数,因为若想使ans最大,则优先取同样的值。
代码
#include <