标签:
题目大意:30001个岛排成一排,编号从0到30000,一共有n个宝物分散在这些岛上,一只猪最开始从0跳到d,之后每一步跳的步长和上一步相差不超过1,第二步步长就是d-1,d,d+1,第二步的位置就是d+d-1,d+1,d+d+1如果d=1,那么下一步不能调0长,经过有宝藏的岛会把宝藏带走,问他最终能拿到多少宝藏。
因为(1+250)*250/2>30000,所以步长不会超过250——get勾
肯定要dp——get勾
如果在某个岛步长可以是1,那么这个岛之后的所有宝藏都能拿到——get勾
歧途在于不能考虑当前状态dp[i][sp]是从哪些状态来的比如说dp[i-sp][sp-1],dp[i-sp][sp],dp[i-sp][sp+1]
而要考虑当前状态dp[i][sp]可以用来给哪些状态信息比如说dp[i+sp][sp-1],dp[i+sp][sp],dp[i+sp][sp+1]
要做总结可以说是后推是确定的,追溯是不确定的,但是我在想为什么我对dp总是一看就懂一做就挂,对比上面两行就差一个加减号,昨天群上还有人问背包问题的正向for和逆向for有什么区别,我多年不清楚就没多想,dp的祖宗没学好啊,不细心。
现在想想,背包的话一定是当前状态找来源来确定值,因为要先知道更小容量的背包的放置情况,也不可能在放下一个物品后就确定对后面的有什么影响。
今天回来时闻到一片腊梅香,好喜欢品客薯片的盐味,食堂关的只剩两个,抄手有点油腻。
codeforces #286 Div.2 C DP总是以意外的方式打败我
标签:
原文地址:http://www.cnblogs.com/beingthan/p/4234949.html