经典的一道DP题。
题目明显是一道DP题,但是比赛的时候一个劲就在想怎么记录状态和转移。最后想到了一种n^3的方法,写了下,不出所料的超时了。
看了别人的代码才发现竟然是先二分然后再进行DP,像这种思路应该会经常用啊。。。
二分距离,DP判断是否可行。
然后这题的DP也是非常经典的,想了好久都想不通,最后站在最优解的情况下思考,才想通。
状态转移方程:
for(int i=1;i<=n;i++) { dp[i]=1; for(int j=1;j<i;j++) if(mabs(g[j]-g[i])<=(i-j)*s) dp[i]=max(dp[i],dp[j]+1); mx=max(mx,dp[i]);// 求出最大可以保留的个数 }
mx=n-mx; //这个就是最小需要的修改次数