![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dp
文章平均质量分 81
Colin_27
这个作者很懒,什么都没留下…
展开
-
最长上升子序列 nlogn
最长上升子序列中对于数ipt[i],向前遍历,当数ipt[j]小于ipt[i] 则ipt[j]可作为上升序列中ipt[i]的前一个数字 dp[i] = max{ dp[j] + 1 | j 若现在有两个状态a,b 满足dp[a] = dp[b]且 ipt[a] 则对于后面的状态dp[a]更优 因为若ipt[i] > dp[b] 则必然ipt[i] > dp[a],反之若ipt[原创 2014-07-08 14:59:05 · 736 阅读 · 0 评论 -
点集配对问题
点集配对问题 空间里n个点,使它们配成n/2对点,使得每个点恰好在一个点对中。 要求所有点队中,两点距离之和尽量下 n d(s) = min(d{S - {i} - {j}+ |Pi Pj| | j属于S, j > i, i = min{S}} //#pragma comment(linker, "/STACK:102400000,102400000") //HEAD原创 2014-07-08 13:36:57 · 2454 阅读 · 0 评论 -
hdu4362 dp + 单调队列优化
dp转移方程很容易想 dp[i][j] = min{dp[i - 1][k] + abs(pos[i][j] -pos[i - 1][j]) + cost[i][j]} n行m列 每次转移扫描m次 共n*m*m 为O(10^7) 1500ms,可以暴力一试。姿势不对就会TLE 其实加上个内联函数求绝对值,同时赋值时候不使用min(a, b) 用G++交 就可以水过 正解是:因原创 2014-07-12 12:24:01 · 939 阅读 · 0 评论 -
neu1458 方格取数 dp解法
题意: 有N * N个格子,每个格子里有正数或者0,从最左上角往最右下角走,只能向下和向右,一共走两次(即从左上角走到右下角走两趟),把所有经过的格子的数加起来,求最大值SUM,且两次如果经过同一个格子,则最后总和SUM中该格子的计数只加一次。 走两次,所以状态表示要同时表示两次路径。dp[i][j][k][l] 表示第一次走到i, j,第二次走到k, l得到的最大值,这里i + j原创 2014-08-07 10:06:29 · 999 阅读 · 0 评论 -
codeforces#FF(div2) DZY Loves Sequences
n个数,可以改变其中一个数原创 2014-07-14 11:12:47 · 1154 阅读 · 0 评论