标签:division Square 加入 CF1497E2 转移 修改 枚举 预处理 dp
我知道状态应该设计为dp (i,k)来表示当前转移到第i位,使用了k次机会。
但是有一个深深的困扰。
贪心地,我把改的数字枚举成了1,但我设计转移方程的时候,我是一个数一个数的讨论要不要加入的。
这样会出现bug:我可以用hash判断能不能加入,但没法实现修改这个功能,也就是说,假设我不能加入了,
但我选择了修改,改成1,那么在后面继续转移的时候,这个修改就没法起作用,因为我不可能记下每时每刻动态的序列。
题解的做法是枚举修改的区间,在使得它的转移是整段整段的,这样可以保证每次枚举都是从断点开始,k也好操作了。
那么时间会不会超时呢?
如果可以预处理出对于当前的这个点来说,往前修改x次后,可以得到的最远长度就好了。
记录修改x次后能一路往前直到j点。
那么答案是dp i,k=min ( dp i,k ,dp j,k-x +1 );
为什么要记最远?贪心~
枚举i,枚举k,复杂度大概是10五次方乘20;
预处理的操作其实也是一种dp。
如果当前数字能加入,就继承前一个,如果不能加入,就把自己改成1,消耗次数+1;
可能有点瑕疵,标解的做法是双指针,,
现在歌单放到了凤凰花开的路口,还有四季予你,我想到了几个在我生命里留下过痕迹但再也没有理由出现的人
完整的ac和报告待会吧。
但是,dp有奇奇怪怪的优化,顺序,预处理,综合题,这正是我喜欢它的地方,永远新鲜。
标签:division,Square,加入,CF1497E2,转移,修改,枚举,预处理,dp 来源: https://www.cnblogs.com/liyishui2003/p/15309672.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。