随笔分类 - ACM——动态规划(DP)
摘要:题意:给出一棵 N 个节点树,上面有 K 个猴子,然后竟可能删边,但是每一只猴子必须有直接相邻的猴子与之相邻。求最少剩下几条边。 分析:一条边可以用两只猴子站,这样的一条点对,越多越好,如果是ans个,ans*2>=k,那么只需要 (k+1)/2 条边。 否则,需要 ans + (k-ans*2)
阅读全文
摘要:题意:从一个发射站发射电视,只有叶子节点是用户,收到一部分费用,所有的边都有花费,求在不亏本的情况下,最多可以让多少用户(叶子结点)收看到电视。 分析:树形背包。 状态定义: dp(i,j) : 以 i 为根的,让 j 个用户看到电视,最大获益(可以为负数)。那么sz不再是原来的定义了。 最后遍历
阅读全文
摘要:题意:每个水果有两个值,一个美味度 a,一个卡路里 b,从中挑选一些,要求 sum(aj) / sum(bj) = k,使得 sum(a) 最大。 分析:没有那个条件就是一个01背包,可以转换,对公式变形,每个水果的重量为 a[i] - b[i] *k ,那么无论怎么挑选,都满足那个条件,价值是 a
阅读全文
摘要:题意:在树的最大独立集的基础上,加上权值。求最大。 分析: 采用刷表的方式写记忆化,考虑一个点选和不选,返回方式pair 型。 首先,无根树转有根树,dp(root)。 注意的是:u不选,那么他的子节点,可以选,或者不选。WA了无数次。 #include <cstdio> #include <vec
阅读全文
摘要:题意:每个人有一个DI值,现在有一个小黑屋,这些人的顺序可以利用这个小黑屋调整,调整方式是入栈出栈方式,也就是说,这里的方案是有卡特兰数个方式。 调整后使得 d1*0 + d2*1 + d3*2 + d4*3 ...... 最小。 分析:这个题目竟然会是区间DP。 考虑区间 [ L, R ] ,那么
阅读全文
摘要:Codeforces Round 419 (Div. 2) Table of Contents Codeforces Round 419 (Div. 2)A. Karen and MorningB. Karen and CoffeeC. Karen and GameE. Karen and Supe
阅读全文
摘要:题意: 有n个施工队,给定他们的位置,有m个防空洞,给定位置,求将施工队放到m个防空洞里面,最少的总距离? n<=4000 分析: dp[i][j] 前 i 个施工队,放到前 j 个防空洞里面的最少距离; dp(i+1,j) = min(dp(i,j),dp(i,j-1)) + dist(a[i]
阅读全文
摘要:题意:n个城市,相互可达(有n(n-1)/2条边),其中有一些道路上面有妖怪,现在,从1号城市出发,随机挑取一个城市走去,这个道路上的妖怪就会被消灭,求: 在平均情况下,需要走多少步,使得任意两个城市之间,可以不经过妖怪而相互可达; (n<=30) 分析: 1、根据题意可知,我们要将每一个可以不经过
阅读全文
摘要:题意:给定一个字符串,求有多少种树与之对应,对应方式是,每次遍历左节点,没有了,就回溯; 分析:d[i,j] = sum(d[i+1,k-1],d[k,j]) (str[i]==str[k]); 坑点是数组竟然要long long 不然会超时,神奇; 1 #include <bits/stdc++.
阅读全文
摘要:题目链接:https://vjudge.net/contest/164840#problem/D 题意: 给一棵树,每条边上有一些权值,求 长度不超过 x ,最多能走多少个点; 分析: 考虑每一个节点,他可以一直走下去,也可以走回来而走到他的兄弟节点; 状态定义: d[x][j][0/1] 从 i
阅读全文
摘要:题目链接:https://vjudge.net/contest/164840#problem/B 题意: 从南往北走,横向的时间不能超过 c; 横向路上有权值,求权值最大; 分析: n<=100,m<=10000 数据范围很大了,基本上要n*m; 分析每个交叉路口,每个交叉路口,可以从下一行的左边,
阅读全文
摘要:题目链接:https://vjudge.net/contest/164840#problem/A 题意:一个字符串刷子,每次可以将一段连续的字符串变成一种颜色,给两个字符串,最少通过几次可以将第一个字符串转换为第二个字符串; 分析: 首先假设第一个字符串和第二个字符串全部不相同,那么怎么刷成第二个字
阅读全文
摘要:题目链接:https://vjudge.net/problem/UVALive-2038 题意:我看了原题,lrj的书上题意写错了,应该是最少点覆盖,当然可以用最大匹配去做,由于是树形的; 可以树形DP; d[u][0] : u 结点 不放; d[u][1] : u 结点放; 1 #include
阅读全文
摘要:题目链接:https://vjudge.net/problem/UVALive-4731 题意: n 个 数,分成 w 组,求整个区间的数学期望的最小值; 一个区间的数学期望公式给出:一个区间的和 * 概率 例子: 0.3 0.05 0.1 0.3 0.25 w=2 {c1,c2,c3} {c4,c
阅读全文
摘要:题目链接:https://vjudge.net/contest/160916#problem/C 题意: 求一个奇数长的子序列,前一半严格递增,后一半严格递减;O(nlogn) 分析: 再次复习一下LIS算法; 严格递增: g[k] : d[]值为 k 的最小元素,由于是严格递增,也就是说二分下界l
阅读全文
摘要:题目链接:https://vjudge.net/contest/160916#problem/B 题意:给一个无向图,和一个序列;要求,在这个序列中,两两相连的两个数相同,或者,在无向图中相邻;(n<=200) 分析: d[i][j] 前 I 个数,最后一位是 j 时,最少的改动量; 我的渣的地方,
阅读全文
摘要:从 n 变到 1,有多少种方案? 打表记忆化。 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 int n; 6 int dp[1000005]; 7 int dfs(int n) { 8 if(n==1) 9 return 1; 10
阅读全文
摘要:题意: 从 前往后跳,要么跳一步,跳到相邻的位置,要么跳到下一个数字相同的位置,求跳到最后的最少步数。 dp,但是会tle,我用map优化了一下。 1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 6 const int inf = 0x
阅读全文
摘要:题意: 给定一个字母集合: 乘法规则如下: 求一个字符串通过加括号的方法,得到 a ,有多少种方案。 这个问题和矩阵连乘问题很类似。 刚开始我想错了,d(i,j),前 i 个字符形成 j 字符的方案数,这个状态的定义是有问题的,问题在于,状态转移,只能是d(i+1,j) 到 d(i,),也就是说,
阅读全文
摘要:题目链接:https://uva.onlinejudge.org/external/115/11572.pdf 题意:找到一个尽量长的连续子序列 Al ~ AR ,使得该序列没有相同的元素。 分析:枚举超时,怎么优化呢? 当我不停的将右端点右移,当我移不动的时候,说明之前的 l ~ r 里面有一个和
阅读全文