随笔分类 - ACM_DP
摘要:题目链接: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.51nod.com/onlineJudge/questionCode.html#!problemId=1183 比较经典的问题,题意不多说了。跟最长公共子序列(LCS)类似。 dp[i][j]表示a字符串0~i-1,b字符串0~j-1最少编辑次数。 要是a[i] ==
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/710/E 加或者减一个字符代价为x,字符数量翻倍代价为y,初始空字符,问你到n个字符的最小代价是多少。 dp[i]表示i个字符的最小代价。 当i为偶数个的时候,由+1或者*2得到。 当i为奇数个的时候,由+
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/711/C 给你n棵树,m种颜色,k是指定最后的完美值。接下来一行n个数 表示1~n树原本的颜色,0的话就是没颜色(一定要上色),非0就是有颜色(不能上色)。 接下来n行 每行m个数,第i行第j个数表示 编号
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2859 给你一个n*n的矩阵,问你最大的对称度是多少(左下右上为对称线) dp[i][j]表示i行j列元素的最大对称度 每到一个元素的时候,往上边和右边扩展看字符最优的对称长度 与dp[i - 1][j
阅读全文
摘要:题目链接:http://poj.org/problem?id=3616 有头牛产奶n小时(n<=1000000),但必须在m个时间段内取奶,给定每个时间段的起始时间和结束时间以及取奶质量 且两次取奶之间须间隔r-1个小时,求最大取奶质量 也就是说r = 2时 3分结束取奶,至少在5分才能取。 按照时
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1160 给你一些老鼠的体重和速度,问你最多需要几只可以证明体重越重速度越慢,并输出任意一组答案。 结构体按照体重从小到大排序,然后根据速度就是最长下降子序列。
阅读全文
摘要:LIS两种写法 O(n^2) dp[i]表示以a[i]结尾的为LIS长度 1 #include <algorithm> 2 #include <iostream> 3 #include <cstdlib> 4 #include <cstring> 5 #include <cstdio> 6 #inc
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/706/C 给你n个字符串,可以反转任意一个字符串,反转每个字符串都有其对应的花费ci。 经过操作后是否能满足字符串str[i]>=str[i-1],能就输出最小花费,不能输出-1。 dp[i][0] 表示不
阅读全文
摘要:题目链接:http://codeforces.com/contest/597/problem/C 给你n和数(1~n各不同),问你长为k+1的上升自序列有多少。 dp[i][j] 表示末尾数字为i 长度为j的上升子序列个数,但是dp数组是在树状数组的update函数中进行更新。 update(i,
阅读全文
摘要:题目链接:http://codeforces.com/contest/560/problem/E 给你一个n*m的网格,有k个坏点,问你从(1,1)到(n,m)不经过坏点有多少条路径。 先把这些坏点排序一下。 dp[i]表示从(1,1)到第i个坏点且不经过其他坏点的路径数目。 dp[i] = Luc
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5773 0可以改变成任何数,问你严格递增的子序列最长是多少。 猜测0一定在最长上升子序列中用到,比如2 0 0 3 5 6,可以变为2 3 4 3 5 6。 那我们先算出0的个数,然后每次遇到0就把后面一
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5791 题目问a和b有多少个相同的子序列。 dp[i][j]表示A序列前i个数和B序列前j个数的相同子序列对有多少个. cnt[i][j]表示当a[i] == b[j]时以a[i]结尾的相同子序列个数.
阅读全文
摘要:题目链接:http://codeforces.com/contest/675/problem/E 你可以从第 i 个车站到 [i + 1, a[i]] 之间的车站花一张票。 p[i][j]表示从 i 到 j 最少花费多少张票,问你 ∑p[i][j] (1<=i<j<=n) 是多少。 设dp[i]表示
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/455/A 给你n个数,要是其中取一个大小为x的数,那x+1和x-1都不能取了,问你最后取完最大的和是多少。 简单dp,dp[i]表示取i时zui最大和为多少,方程为dp[i] = max(dp[i - 1]
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/429/B 给你一个矩阵,一个人从(1, 1) ->(n, m),只能向下或者向右; 一个人从(n, 1) ->(1, m),只能向上或者向右。必须有一个相遇点, 相遇点的值不能被取到, 问两个人能得到的最大
阅读全文
摘要:题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1078 老鼠初始时在n*n的矩阵的(0 , 0)位置,每次可以向垂直或水平的一个方向移动1到k格,每次移动过去的那个格子里面的数值必须比当前所在格子里面的大,求出路径上所有数值总和最大值。 直接上代码:
阅读全文
摘要:题目链接:http://poj.org/problem?id=1664 dp[i][j]表示i个盘放j个苹果的方案数,dp[i][j] 可以由 dp[i - 1][j] 和 dp[i][j - i] 递推而来。 当盘子的个数大于等于苹果的个数: dp[i - 1][j] :i - 1个盘子放j个苹果
阅读全文
摘要:题目链接:http://codeforces.com/problemset/problem/474/D 用RW组成字符串,要求w的个数要k个连续出现,R任意,问字符串长度为[a, b]时,字符串的种类有多少。 递推,dp[i]表示长度为i的种类有多少。当i < k的时候 dp[i] = 1 , 当i
阅读全文