随笔分类 -  DP

C. Garland
摘要:http://codeforces.com/contest/1287/problem/C 思路: dp[k][h][w][z] 表示剩余0-k节点,基数点剩余h个,偶数点剩余w个,k点为z(奇/偶) 的情况下的最优值。 其中w可以省略掉因为可以根据k和h计算出w,为了方便写计算留下了w。 代码: 阅读全文
posted @ 2020-01-07 15:31 夜-> 阅读(268) 评论(0) 推荐(0)
2072. Kirill the Gardener 3
摘要:http://acm.timus.ru/problem.aspx?space=1&num=2072 回忆一下 阅读全文
posted @ 2017-02-07 21:39 夜-> 阅读(365) 评论(0) 推荐(0)
2018. The Debut Album
摘要:http://acm.timus.ru/problem.aspx?space=1&num=2018真心爱过,怎么能彻底忘掉题目大意:长度为n的串,由1和2组成,连续的1不能超过a个,连续的2不能超过b个dpa[i] 表示长度为i时以a为结尾的串的个数,dpb[i] 类似求dpa[i]时 需要枚举结尾... 阅读全文
posted @ 2015-02-09 17:07 夜-> 阅读(471) 评论(0) 推荐(0)
D. Game with Strings
摘要:http://codeforces.com/contest/355/problem/D这道题问了一下学妹,难道说哥已经老了!!!首先题意理解上有些问题 比如说a b cb d ef g h第一个人写下 a ,第二个人写下 b,然后又该第一个人写了,这时候的 b 既可以是上边的 b也可以是下边的 b 由将要写的人决定dp[n][1#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pair . 阅读全文
posted @ 2013-11-06 20:40 夜-> 阅读(303) 评论(0) 推荐(0)
1476. Lunar Code
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1476由于前一列对后一列有影响,所以需要保持前一列的状态,但无需用状态压缩来保存(也保存不了) 只需要保存前一列以 k 个0结尾的个数就可以代码:import java.math.BigInteger;import java.util.Scanner;public class Main { /** * @param args */ static final int N = 44; public static void main(String[] args) { // TODO Auto-gene 阅读全文
posted @ 2013-10-07 16:37 夜-> 阅读(392) 评论(0) 推荐(0)
1526. Martian Plates
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1526题目大意:可以从n个碟子中任选一个放在桌子上(不断往上放),也可以把桌子上最顶端的盘子拿走对于约束条件 i , j 是说假如 i 这个碟子还在桌子上,就不能拿走 j 这个碟子,也就等于放了i 这个碟子就不能再放 j 了,因为放了 i 再放 j,就会相互约束,无法拿走碟子了。思路:可以把问题转化为括号匹配队列问题,左括号代表拿来碟子,右括号代表拿走碟子。dp[x][y] , x 代表还有x个碟子可以放,y 代表已经放了的碟子的状态压缩表示再放的形式就是 “(递归1 ) 递归2 ”,根据y可以 阅读全文
posted @ 2013-10-05 20:59 夜-> 阅读(346) 评论(0) 推荐(0)
1171. Lost in Space
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1171一天的时间,WA了N遍,居然是因为数组开小了呀,我勒个去!鄙视自己。。。。。。我是从第 1 层往上更新的dp[level][x][y][day] 表示到第level层的(x,y)位置(第level层已经用完,该去第level+1层)且用了 day 天时的最多食物量d[level][x][y][x1][y1][day] 表示在第level层 从(x,y)到(x1,y1) 且用day天 最多获取事物量d[level][x][y][x1][y1][day]的求取过程可以爆搜dp[level][x 阅读全文
posted @ 2013-10-04 19:49 夜-> 阅读(449) 评论(0) 推荐(0)
1310. ACM Diagnostics
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1310题目中说的 “the lexicographically increasing list”10 和 2 谁更小呢,我刚开始没管这么多,直接按数的大小算的,把 2 放在了 10 的前面然后也过了,但是题意是不是这个意思?思路:数位DP + 二分代码:import java.math.BigInteger;import java.util.Scanner;public class Main { /** * @param args */ static final int N = 105; sta 阅读全文
posted @ 2013-10-03 15:17 夜-> 阅读(354) 评论(0) 推荐(0)
1472. Martian Army
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1472题目大意:一颗树,根节点(1) 的值为 1.0,所有叶子节点的值为 0.0 ,其他节点值任意最后要求的是 所有相邻两个节点的值差的总和最小。思路:假设一个叶子节点为 c ,他的父节点为 b ,b的父节点为 a,那么 c 的值为 0.0,此子树的最优结果为(value[a]-value[b])*cost[a->b] + (value[b]-value[c])*cost[b->c]的最小值因为value[c]=0.0 确定,那么value[b]的值要么为 0.0 要么为value[ 阅读全文
posted @ 2013-10-03 12:58 夜-> 阅读(385) 评论(0) 推荐(0)
1745. Yet Another Answer
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1745题目大意:可以是任意的顺序,在满足括号匹配的情况下,求组合成的字符串长度最长思路:先将每一个字符串进行处理,处理时将匹配的去掉 比如说 {)(()(())(} 处理后就变成了 {)( (}当然字符串的长度是没有变化的 处理后的字符串假如说 左括号的个数为L 右括号的个数为R我们必须确定一个正确的顺序,可以让我们从头到尾的逐个决定是否选用当前字符串,而且不影响最优结果字符串有 L>R,LR的字符串要放在前面 因为每一个这样的字符串都可以使左括号 — 右括号 的值变大,而对于 LR的情况 阅读全文
posted @ 2013-10-02 17:56 夜-> 阅读(549) 评论(0) 推荐(0)
1362. Classmates 2
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1362水题,树形DP代码:#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pair pp;const int INF=0x3f3f3f3f;const int N=100002;int head[N],I;int d[N];priority_queueqt[N];struc 阅读全文
posted @ 2013-09-30 16:44 夜-> 阅读(296) 评论(0) 推荐(0)
1172. Ship Routes
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1172水题DP 大整数直接上java代码:import java.math.BigInteger;import java.util.Scanner;public class Main { /** * @param args */ static final int N = 35; public static void main(String[] args) { // TODO Auto-generated method stub Scanner in = new Scanner(System.in 阅读全文
posted @ 2013-09-30 16:08 夜-> 阅读(335) 评论(0) 推荐(0)
1238. Folding
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1238DP+记忆化搜索思路不难,关键是最优结果的储存问题,为了编写方便,直接用string储存最优结果虽然速度慢了一些,不过写起来方便代码:#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pair pp;const int INF=0x3f3f3f3f;const int 阅读全文
posted @ 2013-09-30 15:27 夜-> 阅读(307) 评论(0) 推荐(0)
1410. Crack
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1410题目倒是不难,水题DP就是题意理解起来有点困难,意思就是给你一段话,提取里面的单词单词有小写字母和大写字母(某些单词的首部)组成 其他字符均为间隔,而且不止一行,提取单词后,从里面选一定的单词,这些单词在原段中不能相邻,然后让提取后所有单词总长最大代码:#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long 阅读全文
posted @ 2013-09-30 09:26 夜-> 阅读(262) 评论(0) 推荐(0)
1900. Brainwashing Device
摘要:http://acm.timus.ru/problem.aspx?space=1&num=1900题目大意:有N个车站,相邻车站之间形成一个段,这样就有N-1个段,每个段最多可以放一个洗脑的仪器,这样的话,所有经过这个段(放了仪器)的人都会开心,我们有K个仪器,问怎么放可以让最多的人快乐思路:dp[i][j] 代表第i个仪器放在第j个段上的最优值,更新最优值时,需要枚举上一个仪器放的位置,在知道上一个仪器放的位置的情况下,可以知道当前位置仪器可以作用到多少人。注意人数全为0的情况代码:#include#include#include#include#include#include#in 阅读全文
posted @ 2013-09-30 08:41 夜-> 阅读(375) 评论(0) 推荐(0)
hdu 4642 Fliping game
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4642对于给定的矩阵 操作步数的奇偶性是确定的奇数步Alice赢 否则Bob赢从左上角向右下角遍历遇到1就进行一次处理 遍历到 (x,y) 的时候必须保证 所有(x,y)左上方的点都处理完了可以根据左上方处理时对(x,y)产生的影响 判断(x,y)的状态代码:#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pairpp 阅读全文
posted @ 2013-08-01 19:09 夜-> 阅读(216) 评论(0) 推荐(0)
hdu 4632 Palindrome subsequence
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4632简单DP代码:#include#include#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pairppd;const double PI = acos(-1.);const double eps = (1e-9);const int MOD=10007;const int N=1005;char s[N];int ans[N][N];int 阅读全文
posted @ 2013-08-01 18:53 夜-> 阅读(167) 评论(0) 推荐(0)
hdu 4628 Pieces
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4628状态压缩DP 时间复杂度应该是 16*(2^32)但是运行时要远小于这个数 所以加一定剪枝就可以过代码:#include#include#include#include#include#include#includeusing namespace std;typedef long long ll;typedef pairppd;const double PI = acos(-1.);const double eps = (1e-9);const int N=20;const int M=(1>s; 阅读全文
posted @ 2013-07-31 15:49 夜-> 阅读(195) 评论(0) 推荐(0)
hdu 4622 Reincarnation
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4622用字典树把每一个字符串对应成一个整数 相同的字符串对应到相同的整数上把所用的串对应的整数放在一个数组里 比如书字符串s[l...r]对应的整数是 k那么二维数组 [l][r] 就等于k假设一个对应好的二维数组 左下角是原点3 4 5 22 3 4 01 6 0 02 0 0 0这样求解 从l到r的不同字符串的个数 其实就是求 从[l][r] 到右下角所在的矩阵所包含不同整数的个数(不包括0)这里需要一定的去重处理 处理后是-1 0 11011 01 1 0 01 0 0 0然后一边dp就可以求... 阅读全文
posted @ 2013-07-31 15:38 夜-> 阅读(262) 评论(0) 推荐(0)
hdu 4616 Game
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4616要记录各种状态的段 a[2][4]a[0][j]表示以trap为起点一共有j个trap的最优值a[1][j]表示不以trap为起点一共有j个trap的最优值dp[x][i][j] 表示以x为根节点的子树从各个叶子到x节点的各状态最优值每到一个节点 要枚举经过此节点的所有符合要求的段中最优的(需要合并段)代码:#include#include#include#include#include#include#include#include#include#include#include#include#in 阅读全文
posted @ 2013-07-26 16:43 夜-> 阅读(213) 评论(0) 推荐(0)