09 2016 档案
摘要:题目链接:http://poj.org/problem?id=3254 给你n*m的菜地,其中1是可以种菜的,而菜与菜之间不能相邻。问有多少种情况。 状压dp入门题,将可以种菜的状态用一个数的二进制表示。第i行的状态只与上一行有关。 此blog讲的很清楚:传送门
阅读全文
摘要:题目链接:http://codeforces.com/contest/583/problem/D 给你t个长度为n的数组。问你最长不下降子序列的长度。 一开始用第一个n数组的lis和最后一个n数组的lis和中间最多相同的数字出现的个数相加。这是错的,比如5 6 3 4 1 2 可以发现数组的长度很小
阅读全文
摘要:题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1005 纸上画一下,找了一下规律,Ank*Cnk.
阅读全文
摘要:题目链接:http://codeforces.com/contest/543/problem/D 给你一棵树,初始所有的边都是坏的,要你修复若干边。指定一个root,所有的点到root最多只有一个坏边。以每个点为root,问分别有多少种方案数。 dp[i]表示以i为子树的root的情况数,不考虑父节
阅读全文
摘要:题目链接:http://codeforces.com/contest/467/problem/C 求k个不重叠长m的连续子序列的最大和。 dp[i][j]表示第i个数的位置个序列的最大和。 前缀和一下就好了。空间可以优化,滚动数组就好了。
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/687/C 题目大概说给n个各有价值的硬币,要从它们中选出若干个组合成面值k,而要求的是各个方案里这些选出的硬币能组合出来的面值有哪些。 dp[i][j][k]表示到第i个硬币,组成面值为j,包含面值为k的方
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3333 题意就是询问区间不同数字的和。 比较经典的树状数组应用。
阅读全文
摘要:题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1201 题意不多说了。 dp[i][j]表示i这个数划分成j个数的情况数。 dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1] 前
阅读全文
摘要:题目链接:http://codeforces.com/contest/118/problem/D 有n个步兵和m个骑兵要排成一排,其中连续的步兵不能超过k1个,连续的骑兵不能超过k2个。 dp[i][j][x][y]表示表示用i个步兵和j个骑兵,末尾有连续的x个步兵,或者有连续的y个骑兵。 所以x
阅读全文
摘要:题目链接:http://codeforces.com/contest/444/problem/C 给定一个长度为n的序列,初始时ai=i,vali=0(1≤i≤n).有两种操作: n≤10^5,1≤x≤10^6. 感觉这是一个比较好的考察线段树区间更新的性质。 当区间的a[i]一样时,区间更新即可,
阅读全文
摘要:题目链接:http://codeforces.com/contest/719/problem/E 题意:操作1将[l, r] + x; 操作2求f[l] + ... + f[r]; 题解:注意矩阵可以是a*(b + c) = a*b + a*c ,还有update的时候传入矩阵
阅读全文
摘要:题目链接:http://acm.uestc.edu.cn/#/problem/show/1218 给出n根木棒的长度和价值,最多可以装在一个长 l 的容器中,相邻木棒之间不允许重叠,且两边上的木棒,可以伸一半的长度在容器外,求最大价值量 01背包是取和不取。那这里我们可以把容器长度 l x 2,筷子
阅读全文
摘要:题目链接:http://acm.uestc.edu.cn/#/problem/show/1217 给你一个长为n的数组,问你有多少个长度严格为m的上升子序列。 dp[i][j]表示以a[i]结尾长为j的上升子序列个数。常规是三个for。 这里用树状数组优化一下,类似前缀和的处理,两个for就好了。
阅读全文
摘要:题目链接:http://codeforces.com/contest/712/problem/D A初始有一个分数a,B初始有一个分数b,有t轮比赛,每次比赛都可以取[-k, k]之间的数,问你最后A比B大的情况有多少种。 dpA[i][j]表示第i轮获得j分的情况数。因为第i轮只和第i-1轮有关,
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3586 给定n个敌方据点,1为司令部,其他点各有一条边相连构成一棵树,每条边都有一个权值cost表示破坏这条边的费用,叶子节点为前线。现要切断前线和司令部的联系,每次切断边的费用不能超过上限limit,问
阅读全文
摘要:题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1405 中文题面不解释了,两次dfs,第一次自下向上,第二次自上向下。 ans[i]表示i节点的答案,cnt[i]表示i节点为root的子树的节点个数,d[i]表示
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1712 有n门课,和m天时间。每门课上不同的天数有不同的价值,但是上过这门课后不能再上了,求m天里的最大价值。 分组背包模版题。
阅读全文
摘要:题目链接:http://codeforces.com/contest/682/problem/D 给你两个字符串,求两个字符串中顺序k个的相同子串 长度之和。(注意是子串) dp[i][j][k][0] 表示a[i] == a[j]时,a字符串前i个和b字符串前j个,顺序k个相同的子串 长度之和 d
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5884 nn个有序序列的归并排序.每次可以选择不超过kk个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过TT, 问kk最小是多少 用一个队列维护合并的数,二分一下判断合理性。注意一点的是要
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5489 给你n个数,要删去其中连续的L个,问你删去之后的LIS最大是多少? 我们先预处理出以i下标为开头的LIS,存到数组中。 然后可以枚举长为L的区间,每次移动,左边增加一个,右边删除一个。 最长上升子
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5492 每个数字只能走下或者走右,问你方差最小多少? 方差 = (n + m - 1) * sum(a[i]^2) + sum(a[i]) 我们可以定义dp[i][j][k]为(i, j)点和为k的最小平
阅读全文
摘要:题目链接:http://acm.fzu.edu.cn/problem.php?pid=2129 dp[i]表示前i个数的子序列个数 当a[i]在i以前出现过,dp[i] = dp[i - 1]*2 - dp[pre - 1],pre表示a[i]在i之前的位置 当a[i]在i以前没有出现过,dp[i]
阅读全文
摘要:题目链接:http://www.lightoj.com/volume_showproblem.php?problem=1100 给你n个数,数的范围是1~1000,给你q个询问,每个询问问你l到r之间数的最小差是多少。 要是l到r的数字个数大于1000,必定会有两个数字重复,所以此时最小差就为0。要
阅读全文
摘要:题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1811 给你一棵树,每个节点有一个颜色。问删除一条边形成两棵子树,两棵子树有多少种颜色是有相同的。 启发式合并,小的合并到大的中。类似的题目有http://codeforces.com/co
阅读全文
摘要:题目链接:http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1804 中文题意就不说了。 dfs从底到根回溯即可,看代码应该能清楚。
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类。 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gcd种类不超过loga[i]种)。 预处理gcd如下代码,感觉真的有点巧妙... 然后用树状数组维护右
阅读全文
摘要:题目链接:http://codeforces.com/gym/101064/problem/D 问你两个数组合相加的第k大数是多少。 先sort数组,二分答案,然后判断其正确性(判断过程是枚举每个数然后二分)。
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/707/E 给你nxm的网格,有k条链,每条链上有len个节点,每个节点有一个值。 有q个操作,操作ask问你一个子矩阵的和是多少,操作switch将第i条链上的值0变原来的数or原来的数变0。 比较明显的二
阅读全文
摘要:题目链接:http://codeforces.com/contest/600/problem/E 给你一棵树,告诉你每个节点的颜色,问你以每个节点为根的子树中出现颜色次数最多的颜色编号和是多少。 最容易想到的是n*n的暴力,但是会超时。所以这里用到类似并查集的合并,对于每个子树颜色种数少的合并到颜色
阅读全文
摘要:题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 比较经典的问题,题意不多说了。跟最长公共子序列(LCS)类似。 dp[i][j]表示a字符串0~i-1,b字符串0~j-1最少编辑次数。 要是a[i] ==
阅读全文
摘要:题目链接:http://poj.org/problem?id=1947 一共有n个节点,要求减去最少的边,行号剩下p个节点。问你去掉的最少边数。 dp[u][j]表示u为子树根,且得到j个节点最少减去的边数。 考虑两种情况,去掉孩子节点v与去不掉。 (1)去掉孩子节点:dp[u][j] = dp[u
阅读全文
摘要:题目链接:http://poj.org/problem?id=3659 给你一个树形图,一个点可以覆盖他周围连接的点,让你用最少的点覆盖所有的点。 dp[i][0]表示用i点来覆盖,dp[i][1]表示用孩子节点来覆盖,dp[i][2]表示用父节点来覆盖 (1) dp[i][0] = min(dp[
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/710/E 加或者减一个字符代价为x,字符数量翻倍代价为y,初始空字符,问你到n个字符的最小代价是多少。 dp[i]表示i个字符的最小代价。 当i为偶数个的时候,由+1或者*2得到。 当i为奇数个的时候,由+
阅读全文
摘要:题目链接:http://poj.org/problem?id=2378 一棵树,去掉一个点剩下的每棵子树节点数不超过n/2。问有哪些这样的点,并按照顺序输出。 dfs回溯即可。
阅读全文
摘要:题目链接:http://poj.org/problem?id=1463 给你一棵树形图,问最少多少个点覆盖所有的边。 可以用树形dp做,任选一点,自底向上回溯更新。 dp[i][0] 表示不选i点 覆盖子树所有边的最少点个数,那选i点的话,那么i的邻接节点都是必选的,所以dp[i][0] += dp
阅读全文