"E Erase Subsequences" 参考: "Educational Codeforces Round 82 A~E 题解" 该题数据范围只有400,所以可以使用$O(n^3)$的写法。 $dp[i][j]$表示在 s 的第 i 个位置(从1开始)和 t1 的第 j 个位置,能够满足的 t ...
分类:
其他好文 时间:
2020-02-13 18:54:51
阅读次数:
57
题目网址:http://poj.org/problem?id=1038 题意:给出一张N*M的格子纸,其中有一些坏格子,问最多可以在格子纸上切下多少个2*3(3*2)的小矩阵(不包含坏格子)。其中N<=150, M<=10。 做法: 容易发现对于右端在第i列的小矩阵,其能否摆放只和i-1, i-2列 ...
分类:
其他好文 时间:
2020-02-13 18:47:46
阅读次数:
72
题解【AcWing279】自然数拆分 标签(空格分隔): DP 背包 "题面" 因为题目中说参与加法运算的数可以重复,由此可以想到完全背包计数问题。 完全背包计数问题与 $01$ 背包计数问题只有一个不同: $01$ 背包计数问题的第二维循环是倒叙循环,而完全背包计数问题的第二维循环是正序循环。 这 ...
转换一下题意,就相当于问t能不能和s中2个不相同的子串相同,我们可以将t串拆成2个子串t1,t2,得到状态dp[i][j][k]=0/1,表示s判断到i位,t1判断到j位,t2判断到k位,0/1表示是否满足 两个状态,s[i]与t1[j]相匹配,s[i]与t2[k]相匹配 dp[i+1][j+1][ ...
分类:
其他好文 时间:
2020-02-13 17:24:56
阅读次数:
85
因为没好好看题,runtime error QAQ 原来开小了…… 还要要多吃输入 不准备详细讲解(因为前面说过基础DP的做题步骤),只标注一下状态转移方程,给大伙品鉴 #include <iostream>#include <cstdio>using namespace std; int main ...
分类:
其他好文 时间:
2020-02-13 16:56:01
阅读次数:
45
本题我们首先很容易可以列出朴素的状态和转移方程 f[i][j],代表前i个分j次购买的最小值 那么显然,这个值可以根据j-1次的所有结果更新而来,但这样的算法是n^2的,不过这题数据范围好像不太大 因为我是专题训练,所以我直接用上了斜率优化的方法 因为题目的转移方程是 f[i][x]=min(f[j ...
分类:
其他好文 时间:
2020-02-13 16:51:34
阅读次数:
58
题目链接: "P2014 选课" ~~简单的~~树形$dp$,借助$dfs$实现。 一般的树形$dp$数组是要维的,一维记录节点(编号或父/子节点的状态(有时三维)),另一维记录权值或计数。 重要的是判断从根节点$dp$还是从叶节点$dp$,显然此题需从叶节点开始。 我们记$dp[i][j]$为从$ ...
分类:
其他好文 时间:
2020-02-13 12:55:41
阅读次数:
57
codeforces 1272 F. Two Bracket Sequences(三维dp + bfs) 题目大意 输入两个括号序列 s,t(不一定合法),你需要构造一个尽可能短的合法括号序列使得s,t 都是这个序列的子序列(子序列意味着不用连续) 解题思路 表示匹配到 的第 个字符,匹配到 的第 ...
分类:
其他好文 时间:
2020-02-12 21:57:14
阅读次数:
63
题意:n个顶点带权无向图,求最短hamilton路径长度(从起点0走到终点n-1,且经过每个顶点恰好一次的路径) 在看位运算的时候做到这题,觉得状态压缩的思路挺奇特的。本来n<20,O(n!*n)的算法肯定炸了,但是可以二进制表示状态 如果将i表示为二进制,i的第j位走过就为1,没走过就为0(注意二 ...
分类:
其他好文 时间:
2020-02-12 20:31:58
阅读次数:
61
最长公共子串 思路: 使用dp数组,当i=0||j=0时 c[i,j]=0,当xi=yj时,c[i,j]=c[i-1,j-1]+1,当xi!=yj时,c[i,j]=0。 1 /** 2 * @author: wooch 3 * @create: 2020/02/12 4 * 最长公共子串 5 * 核 ...
分类:
其他好文 时间:
2020-02-12 18:31:56
阅读次数:
52