随笔分类 - { 动态规划 }
摘要:题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5726 Description Give you a sequence of N(N≤100,000) integers : a1,...,an(0<ai≤1000,000,000). Ther
阅读全文
摘要:题目大概说给一个长m的括号序列s,要在其前面和后面添加括号使其变为合法的长度n的括号序列,p+s+q,问有几种方式。(合法的括号序列当且仅当左括号总数等于右括号总数且任何一个前缀左括号数大于等于右括号数) 我这么想的:n-m<=2000,因而可以dp计算p和q的方案数,同时在各个地方加入s进行转移。
阅读全文
摘要:题目大概说给两个串,问最少要用多少个第一个串的子串(可以翻转)拼成第二个串。 UVa1401,一个道理。。dp[i]表示前缀i拼接成功所需最少的子串,利用第一个串所有子串建立的Trie树往前枚举转移。
阅读全文
摘要:题目大概说给一个数字组成的字符串问有几个子串其代表的数字(可以有前导0)能被4整除。 dp[i][m]表示字符串0...i中mod 4为m的后缀的个数 通过在i-1添加str[i]字符转移,或者以str[i]为新后缀的开头转移
阅读全文
摘要:题目大概说,有n个颜色的宝石,可以消除是回文串的连续颜色序列,问最少要几下才能全部消除。 自然想到dp[i][j]表示序列i...j全部消除的最少操作数 有几种消除的方式都能通过枚举k(i<=k<j)从min(dp[i][k],dp[k+1][j])转移 还有一种先消除中间的,剩余两部分组成回文串再
阅读全文
摘要:题目大概说给一个加密的字符串,加密规则是把原文转化成小写字母,然后各个单词反转,最后去掉空格。现在给几个已知的单词,还原加密的字符串。 和UVa1401一个道理。。 用dp[i]表示加密字符前i个字符都被解密时,最后所用单词编号,为0表示不能被解密 然后转移一个样,从i出发往前在Trie树上跑,看看
阅读全文
摘要:题目大概说有n(<=10W)个车站,每个车站i卖到车站i+1...a[i]的票,p[i][j]表示从车站i到车站j所需买的最少车票数,求所有的p[i][j](i<j)的和。 好难,不会写。。 dp[i]表示Σp[i][j](j>i) 转移是dp[i]=dp[k]+(n-i)-(a[i]-k),其中k
阅读全文
摘要:题目大概说给一个森林求其最小点覆盖数,同时在最小点覆盖条件下输出最多有多少条边被覆盖两次。 dp[0/1][u]表示以u为根的子树内的边都被覆盖且u不属于/属于覆盖集所需的最少点数 另外,用cnt[0/1][u]表示满足dp[0/1][u]状态下子树内被覆盖两次最多的边数 对于dp[0][u]只能从
阅读全文
摘要:题目大概说给一张地图,地图每个格子都有0到9中的某一个数字。现在要在一个格子放炸弹,炸弹爆炸后水柱有两种扩展方式,一种是上、下、左、右,另一种是左上、右下、右上、左下,且四个方向的长度都一样。问放哪个格子怎么爆炸使得水柱覆盖的格子上的数字乘积最大,结果模1e9+7。 这题不会做。。 首先,各个格子的
阅读全文
摘要:题目大概说要吃掉n个食物里m个,吃掉各个食物都会得到一定的满意度,有些食物如果在某些食物之后吃还会增加满意度,问怎么吃满意度最高。 dp[S][i]表示已经吃掉的食物集合是S且刚吃的是第i个食物的最大满意度 。。没什么好说的
阅读全文
摘要:题目大概说给一棵点有权、边也有权的树。一个结点v不高兴当且仅当存在一个其子树上的结点u,使得v到u路径上的边权和大于u的权值。现在要不断地删除叶子结点使得所有结点都高兴,问最少删几个叶子结点。 一开始题目看错了,以为说的是v到u路径上的边权和小于v的权值,然后想出了个解法:从根开始DFS,找高兴的结
阅读全文
摘要:题目大概说给两个字符串s和t,然后要求一个包含k个字符串的序列,而这个序列是两个字符串的公共子序列,问这个序列包含的字符串的总长最多是多少。 如果用DP解,考虑到问题的规模,自然这么表示状态: dp[i][j][k]表示s[0...i]与t[0...j]包含k个字符串的公共子序列的最大总长 想怎么转
阅读全文
摘要:题目大概说有一个n*m的格子地图,每个格子有铀或者镭矿。地图最北面的镭矿加工厂,最西面有铀矿加工厂,而要通过在格子里铺设由南向北(镭)或由东向西(铀)的轨道来送矿物到加工厂。一个格子只能铺设一种轨道,即要嘛运送铀要嘛运送镭,不同轨道也不能相交。现在知道地图上各个格子铀和镭的数量,问怎么铺设轨道使送到
阅读全文
摘要:题目大概说一个平面有n个灰尘,可以用一把刷子直直刷过去清理直线上的所有灰尘,问最少要刷几下才能清理完所有灰尘。 首先怎么刷其实是可以确定的,或者说直线有哪些是可以确定的,而最多就有C(n,2)条不一样的直线,即16*15/2=120; 然后容易想到用状压DP求解,d[S]表示已经清理的灰尘的状态是S
阅读全文
摘要:题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的硬币能组合出来的面值有哪些。 有点绕。。 dp[i][j][k]表示前i个硬币中 能否 组合成面值j且选出的硬币能组合成面值k 转移要考虑全面。。三个方向转移,第i个不选、第i个选但不参与选出硬币去组合成
阅读全文
摘要:题目大概说一个平面上分布n个灰尘,现在要用一个宽w的刷子清理灰尘:选择一个起点,往水平线上扫过去这个水平线上的灰尘就消失了。问最多进行k次这样的操作能清理最多多少灰尘。 没什么的DP。 先按垂直坐标给灰尘们排个序, 然后d[i][k]表示前i个灰尘中,进行到第k次清理操作时刷子底部在第i个灰尘的竖坐
阅读全文
摘要:题目大概就是要,给一个由若干区间[Si,Ti]组成的序列,求最小长度的子序列,使这个子序列覆盖1到n这n个点。 dp[i]表示从第0个到第i个区间且使用第i个区间,覆盖1到Ti所需的最少长度 对于Si=1的i区间dp值就是1了,要求的答案就是所有Ti=n的最小的dp值 转移就是,dp[i]=dp[j
阅读全文
摘要:题目大概求一棵树中大小为k的子树的最大权和。 dp[u][k]表示以u为根的子树中包含u结点的大小为k的子树的最大权和,然后树上背包转移转移很容易。。
阅读全文
摘要:题目大概说,一辆带有一个容量有限的油箱的车子在一张图上行驶,每行驶一单位长度消耗一单位油,图上的每个点都可以加油,不过都有各自的单位费用,问从起点驾驶到终点的最少花费是多少? 这题自然想到图上DP,通过最短路来转移方程: dp[u][c]表示当前在u点油箱还有c单位油时的最少花费 不过,我T得好惨,
阅读全文
摘要:题目大概说一棵n结点二叉苹果树,n-1个分支,每个分支各有苹果,1是根,要删掉若干个分支,保留q个分支,问最多能保留几个苹果。 挺简单的树形DP,因为是二叉树,都不需要树上背包什么的。 dp[u][k]表示以u结点为根的子树保留k个分支最多能有的苹果数 转移就是左子树若干个,右子树若干个转移。。
阅读全文