E题---DP
http://codeforces.com/contest/201/problem/C
首先假设i, j是满足i <= j的起点和终点,(如果i > j,那么交换i和j),那么一定有:
0 ~ i:取偶数,因为有来有回,left_even[i],可能又断点,例如 点 3 点 1 点 2 点5那么如果i是第三个点的话,那么不能过为1的线段,所以左边的3就毫无意义了。
i ~ j :取奇数,因为是从i到j的,sum_odd[i] - sum_odd[j],不可能有断点,因为线段至少是1。
j ~ n:取偶数,因为有来有回,right_even[j],可能有断点,同上1。
ans[i][j]代表从i到j的最大的值:
ans[i][j] = left_even[i] + sum_odd[i] - sum_odd[j] + right[j];
第一步:先求出上述数组,复杂度O (n).
第二 步:对于每个j属于从0 ~ n - 1;
对于j,i属于0 ~ j,从left_even[i] + sum_odd[i]中求出了最佳的i_best;得到了ans[i_best][j];
对于j+1,i属于0 ~ j + 1,可能更新i值的只有可能是i= j+1,所以只要比较left_even[i] + sum_odd[i]和left_even[j + 1] + sum_odd[j + 1]的大小即可。
CodeForces E题 DP解析
本文详细解析CodeForces E题的动态规划算法。针对特定路径选择问题,提出了一种有效的DP方案,通过预处理数组,实现了路径价值的最大化计算。
873

被折叠的 条评论
为什么被折叠?



