随笔分类 -  DP

摘要:题目传送门 1 /* 2 题意:(我懒得写,照搬网上的)有n个仓库,m个人看管。一个仓库只能由一个人来看管,一个人可以看管多个仓库。 3 每个人有一个能力值pi,如果他看管k个仓库,那么所看管的每个仓库的安全值为 pi/k(向下取整) 4 如果某个仓库没有人看管... 阅读全文
posted @ 2015-08-16 12:34 Running_Time 阅读(200) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:给出一系列的01字符串,问最少要问几个问题(列)能把它们区分出来 3 状态DP+记忆化搜索:dp[s1][s2]表示问题集合为s1。答案对错集合为s2时,还要问几次才能区分出来 4 若和答案(自己拟定)相差小于等于1时,证说明... 阅读全文
posted @ 2015-08-15 15:55 Running_Time 阅读(259) 评论(0) 推荐(0)
摘要:题目传送门题意:给一串跳舞的动作,至少一只脚落到指定的位置,不同的走法有不同的体力消耗,问最小体力消费多少分析:dp[i][j][k] 表示前i个动作,当前状态(j, k)的最小消费,状态转移方程:(a[i], k) #include #include #include #include #incl... 阅读全文
posted @ 2015-08-15 15:33 Running_Time 阅读(293) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:把N个数分成两组,一组加起来是A,一组加起来是B,113 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #incl... 阅读全文
posted @ 2015-08-13 20:02 Running_Time 阅读(162) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:给一个字符串,连续相同的段落可以合并,gogogo->3(go),问最小表示的长度 3 区间DP:dp[i][j]表示[i,j]的区间最小表示长度,那么dp[i][j] = min (dp[j][k] + dp[k+1][i+j-1]), 4 ... 阅读全文
posted @ 2015-08-12 18:39 Running_Time 阅读(221) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题解:选择一个点,它相邻的点都当做被选择,问最少选择多少点将所有点都被选择 3 树形DP:dp[i][0/1]表示当前点选或不选,如果选,相邻的点可选可不选,取最小值 4 */ 5 /*************************************... 阅读全文
posted @ 2015-08-12 14:41 Running_Time 阅读(193) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:给一个串,只能是0,1,?(0/1)。计算格雷码方法:当前值与前一个值异或,若为1,可以累加a[i],问最大累加值 3 DP:dp[i][0/1]表示当前第i位选择0/1时的最大分数,那么分类讨论,情况太多,看代码,注意不可能的状态不要转移 4 */ ... 阅读全文
posted @ 2015-08-12 10:39 Running_Time 阅读(192) 评论(0) 推荐(0)
摘要:题目传送门 题意:求MCS(最大连续子序列和)及两个端点分析:第一种办法:dp[i] = max (dp[i-1] + a[i], a[i]) 可以不开数组,用一个sum表示前i个数字的MCS,其实是一样的。。。类似DP的做法有个名字叫联机算法。 第二种办法:一个前缀记录前i个数字的和,那么an... 阅读全文
posted @ 2015-08-10 19:13 Running_Time 阅读(238) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:学校有在任的老师和应聘的老师,选择一些应聘老师,使得每门科目至少两个老师教,问最少花费多少 3 状压DP:一看到数据那么小,肯定是状压了。这个状态不好想,dp[s1][s2]表示s1二进制表示下至少有1位老师的科目集合 4 s2... 阅读全文
posted @ 2015-08-10 16:38 Running_Time 阅读(237) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 01背包(类):dp[i][j][k] 表示从(i, j)出发的和为k的方案数,那么cnt = sum (dp[1][i][s]) 3 状态转移方程:dp[i][j][k] = dp[i+1][j][k-c] + dp[i+1][j+1... 阅读全文
posted @ 2015-08-09 16:48 Running_Time 阅读(382) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题,首先我题目看了老半天,看懂后写出前缀和又不知道该如何定义状态好,写不... 阅读全文
posted @ 2015-08-09 11:18 Running_Time 阅读(168) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 DP:这题赤裸裸的dp,dp[i][1/0]表示第i块板放木桩和不放木桩的方案数。状态转移方程: 3 dp[i][1] = dp[i-3][1] + dp[i-3][0] + 1; dp[i][0] = dp[i-1][1] + dp[i-1][0]... 阅读全文
posted @ 2015-08-09 09:16 Running_Time 阅读(175) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:一只兔子顺时针跳,另一只逆时针跳,跳石头权值相等而且不能越过起点 3 LPS:这道就是LPS的应用,把环倍增成链,套一下LPS,然而并不能理解dp[i][i+n-2] + 1,看别人的解题报告吧,以后来补(玩游戏) 4 详细解释 5 */ 6 /... 阅读全文
posted @ 2015-08-08 18:06 Running_Time 阅读(258) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 数学:约瑟夫环问题的变形,首先定义f[i]表示剩下i个人时,最后一个选出的人,有个公式:f[i] = (f[i-1] + m) % i 3 f[1] = 0(编号从0开始),那么类似最后一个数的求法,先找到剩2个人和剩3个人时,最后的编号,然后跟着最... 阅读全文
posted @ 2015-08-08 15:17 Running_Time 阅读(153) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:洛克人有武器可以消灭机器人,还可以从被摧毁的机器人手里得到武器,问消灭全部机器人的顺序总数 3 状态压缩DP:看到数据只有16,就应该想到状压(并没有)。因为是照解题报告写的,代码里加点注释,省的以后忘记了 4 */ 5 /**************... 阅读全文
posted @ 2015-08-08 13:55 Running_Time 阅读(232) 评论(0) 推荐(0)
摘要:题目传送门题意:求LPS (Longest Palidromic Subsequence) 最长回文子序列。和回文串不同,子序列是可以不连续的。分析:1.推荐->还有一种写法是用了LCS的思想,dp[i][j]表示i到j的最长回文串长度,状态转移方程: 1. dp[j][j+i-1] = ... 阅读全文
posted @ 2015-08-07 16:22 Running_Time 阅读(462) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:将子符串分成k组,每组的字符顺序任意,问改变后的字符串最少有多少块 3 三维DP:可以知道,每一组的最少块是确定的,问题就在于组与组之间可能会合并块,总块数会-1。 4 dp[i][j]表示第i组以第j个字符结尾的最少块数,状态转移方程... 阅读全文
posted @ 2015-08-07 16:06 Running_Time 阅读(248) 评论(0) 推荐(0)
摘要:题目传送门题意:找对称的,形如:123454321 子序列的最长长度分析:LIS的nlogn的做法,首先从前扫到尾,记录每个位置的最长上升子序列,从后扫到头同理。因为是对称的,所以取较小值*2-1再取最大值代码:/*******************************************... 阅读全文
posted @ 2015-08-05 22:58 Running_Time 阅读(171) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:给一个字符串,划分成尽量少的回文串 3 区间DP:状态转移方程:dp[i] = min (dp[i], dp[j-1] + 1); dp[i] 表示前i个字符划分的最少回文串, 4 如果s[j] 到 s[i]是回文串,那么可以从... 阅读全文
posted @ 2015-08-05 11:11 Running_Time 阅读(175) 评论(0) 推荐(0)
摘要:题目传送门 1 /* 2 题意:给定包含n个点的无向图和一个长度为L的序列,修改尽量少的点使得相邻的数字相同或连通 3 DP:状态转移方程:dp[i][j] = min (dp[i][j], dp[i-1][k] + (j != a[i])); 4 dp[i][j]表示前... 阅读全文
posted @ 2015-08-05 10:59 Running_Time 阅读(233) 评论(0) 推荐(0)