随笔分类 -  DP

摘要:一.能量项链 https://www.luogu.org/problem/P1063 (这道题和紫书里的最优矩阵链乘很像) ①分析样例: 4 2 3 5 10 我们把它写成4个乘法表达式: 2*3 3*5 5*10 10*2 合并它需要3次乘法: 10*2*3 3*5 5*10 能量+60 10*2 阅读全文
posted @ 2019-11-12 20:48 Neptune0 阅读(126) 评论(0) 推荐(0)
摘要:题目给了一个矩阵,要求一来一回点权和最大,而且走过的点不能再走 最开始我是这么想的: 顺着来一遍,记录路径,清空路径上的好感度,再反着来一遍。 结果出错了,为什么? 因为这样做能保证第一条路一定点权和最大,但不能确保一来一回的点权和最大(样例都过不掉) 所以我们把求两条严格不相交路径看成两个人同时从 阅读全文
posted @ 2019-11-07 20:32 Neptune0 阅读(113) 评论(0) 推荐(0)
摘要:此题与LCS非常相似。 因为是两个串的比对,所以我们很容易想到用f【i】【j】来表示a串的前i个碱基和b串的前j个碱基配出的最大相似度(每一个碱基都配对一个碱基,或者配空碱基), 那么这个状态的前驱就有三种: ①f【i】【j-1】+(b【j】与空碱基的相似度) ②f【i-1】【j】+(a【i】与空碱 阅读全文
posted @ 2019-11-06 16:27 Neptune0 阅读(255) 评论(0) 推荐(0)
摘要:这道题是紫书里的,以下的主代码也来自紫书,但笔者会在这里做一些补充说明。 本题中把单向流逝的时间作为拓补序,用时刻和位置作为状态参数, dp【i】【j】表示在i车站,j时刻时还需等待的最少时间(其实通常我们把表示阶段的放在前面) 边界是这个:dp[n][tm]=0; for(int i=1;i<n; 阅读全文
posted @ 2019-10-30 21:16 Neptune0 阅读(190) 评论(0) 推荐(0)
摘要:OpenJudge - 1001:嵌套矩形问题http://cdsdzx.openjudge.cn/practice/1001/ 这是紫书里嵌套矩形问题的简化版 注意要将d数组初始化为0,如果初始化为1的话,在记忆化上会出错。 代码如下(核心代码来自紫书) #include<iostream> #i 阅读全文
posted @ 2019-10-28 21:29 Neptune0 阅读(138) 评论(0) 推荐(0)
摘要:目前整理了两种做法 方法一: 设a为输入的字符串,num【i】【j】表示字符串中从下标为i到j(故从0开始)的一串数字。那么可以得到 for(int i=0;i<n;i++) num[ i ][ i ]=a[ i ]-'0'; for(int i=0;i<n;i++) for(int j=i+1;j 阅读全文
posted @ 2019-08-19 19:42 Neptune0 阅读(376) 评论(0) 推荐(0)