动态规划
Aoxuets
REM 是我的, 拔剑吧!
展开
-
HDU 4648
题意 :给你 N 个数, 和 mod M; 求 N 个数中 啪去 连续K 个数后 mod M 不变 的 K 的 MAx; DP : 其实就是找连续K个数的和为M的倍数 吧前缀和 mod M 记录下来,计算出现的间距最长就有了 #include#include#includetypedef long long ll;using namespace std;const int ma原创 2016-03-14 10:54:57 · 357 阅读 · 0 评论 -
CF 675E Trains and Statistic(线段树 + Dp)
题目:给你 n 个车站, 第 i 个车站能买到 i+1 到 A[i] 的票, 现在有 P[i][j] 为 车站 i 到 j 所需要的最少的买票次数。 求所有的 P[i][j] 的和。分析:首先, 对于在车站 i , 做到最后一站, 我们贪心买票的思路是 在 i+1 到 A[i] 车站中取最大值, 在那一站再去买票, 即可最少到达最后一站。在求解过程中, 有很多重复步骤, 故可以Dp从后往前扫。利用原创 2016-06-06 16:11:03 · 504 阅读 · 0 评论 -
Light OJ 1402 (Dp + 树状数组)
题目:[LINK](http://www.lightoj.com/volume_showproblem.php?problem=1402)给你一些点(SRT, R);按照SRT排序, 然后再坐标系中画出这些点, 连成一条线。线会有峰点(peak),一个点是峰点, 相邻两个点的 R 值都比它小 或 大。然后WARush 要丧病的忽略一些点,(忽略第X点后,第 X 后面的点会前移! ) 会形成原创 2016-05-20 15:48:17 · 430 阅读 · 0 评论 -
CF 2B The least round way DP+Math
题意: 找出一条路, 使每个节点相乘,得到的数末尾 0 最少每次移动只能向右或者向下, 找到后打印路径///按照题目要求,就是找出一条从左上角到右下角中每个数含2 or 5 最少的路///可以用Dp的思想, 然后把每个节点该走的方向记下来///再从终点回溯,把路径存入栈,再输出///数据会有0的情况, 这时候我们应该记录离终点最近的0#includeusing na原创 2016-03-14 10:55:13 · 427 阅读 · 0 评论 -
CF 573B
Bear and Blockstime limit per test1 secondmemory limit per test256 megabytesinputstandard inputoutputstandard outputLimak is a little bear who loves to play. Today he is playing by d原创 2016-03-14 10:55:22 · 781 阅读 · 0 评论 -
CF 189A Cut Ribbon
#includeusing namespace std;const int maxn = 4000 + 131;int n, a, b, c;int Dp[maxn];int main(){ ios::sync_with_stdio(false); cin.tie(0); cin >> n >> a >> b >> c; mems原创 2016-03-14 10:55:30 · 394 阅读 · 0 评论 -
CF 313B
题意: 给你一个字符串, 然后m次区间查询,求出区间有多少组 str【i】 == str【i+1】就是一个水DP了 有则Dp【i】 = Dp【i-1】 无则 Dp【i】 = Dp【i-1】;(刚开始理解错题意,以为要查询区间次数最多的频数, 还RMQ WA了。。。http://www.cnblogs.com/aoxuets/p/4792907.html, 查找次数的。。)#incl原创 2016-03-14 10:55:35 · 410 阅读 · 0 评论 -
CF 545C
题意: 砍树, 树会向左或者向右倒,数不能倒重叠, 问最多可以砍多少树思路: 贪心 + Dp吧, 树要尽可能网左倒,这样对后面的树影响较小, 才是最优状态#include#include#includeusing namespace std;const int maxn = 1e5 + 131;struct Tree{ int pos, val;原创 2016-03-14 10:55:42 · 423 阅读 · 0 评论 -
Light OJ 1011
题意: (好难看) 给你 N 个 男的, 女的, 男的选女票, 题目给出矩阵, Mp[i][j] 表示 第 i 个男的选 第 J 个女的优先值 选了 J 之后的就不能选 J 了; 求所有狗男女的最大优先值 思路: Dp + 状态 压缩#includeusing namespace std;const int maxn = 1<<16;int Mp[20][20原创 2016-03-14 10:59:42 · 256 阅读 · 0 评论 -
Light OJ 1085 - All Possible Increasing Subsequences
题目link 给定一个序列, 求出上升子序列的总数。分析Dp[i] 表示序列 以 i 结尾的数目。 可知 Dp[i]=∑Dp[x]+1Dp[i] = \sum Dp[x] + 1 这是一个前缀和, 用树状数组维护。Code#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 1e原创 2016-05-14 22:04:00 · 390 阅读 · 0 评论 -
数位DP
CodeForces 55D : Beautiful numbers题意 : 求 【L,R】之间能被自己每一位非0数整除的数的个数。1-9的LCM是比较小的, 但是直接开会爆, 需要离散化, 这题关键 lcm 和 离散了#includeusing namespace std;const int maxn = 2520;int gcd(int a, int b) {r原创 2016-03-14 11:00:27 · 346 阅读 · 0 评论 -
51nod--1006 最长公共子序列Lcs (动态规划)
题目:给出两个字符串A B,求A与B的最长公共子序列(子序列不要求是连续的)。 比如两个串为:abcicba abdkscabab是两个串的子序列,abc也是,abca也是,其中abca是这两个字符串最长的子序列。 Input 第1行:字符串A 第2行:字符串B (A,B的长度 <= 1000) Output 输出最长的子序列,如果有多个,随意输出1个。 Input示例 abci原创 2016-03-23 19:30:17 · 415 阅读 · 0 评论 -
51nod--1134 最长递增子序列 (动态规划)
题目:给出长度为N的数组,找出这个数组的最长递增子序列。(递增子序列是指,子序列的元素是递增的) 例如:5 1 6 8 2 4 5 10,最长递增子序列是1 2 4 5 10。 Input 第1行:1个数N,N为序列的长度(2 <= N <= 50000) 第2 - N + 1行:每行1个数,对应序列的元素(-10^9 <= S[i] <= 10^9) Output 输出最长递增子序列的原创 2016-03-23 18:43:54 · 924 阅读 · 0 评论 -
51nod--1183 编辑距离(动态规划)
题目:1183 编辑距离 基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题 收藏 关注 编辑距离,又称Levenshtein距离(也叫做Edit Distance),是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。 例如将kitten一字转成sitting: sitten (k-原创 2016-03-20 00:08:59 · 675 阅读 · 0 评论 -
HDU 1069
题意 : 给你 N 种 长方体, 每种无限多 长方体可以堆叠,不过接触的尺寸 长宽必须严格小于下方的长方体 问最多长方体可以堆多高 思路: 动态规划 先把每种 长方体可能的形态存下来 然后求最大递减子序列和 #include#include#include#includeusing namespace std;typedef long long ll;const int原创 2016-03-14 10:54:19 · 262 阅读 · 0 评论 -
HDU 1074 (DP + 状态压缩)
题意: 给你N个课程, 每个课程有结束的时间 , 和完成这门课程需要的时间 超过课程结束ed时间,每一天就要花费 1点绩点; 然后要求你安排如何做课程使得花费的绩点最少 (看了博客后才发现状态压缩很⑥) 用二进制表示状态 + 前驱标记 #include#include#include#includestring>#includeusing namespace std;typ原创 2016-03-14 10:54:22 · 316 阅读 · 0 评论 -
HDU 4455
题意 : 题目 给你一个序列 , 查询 t ,问 序列 连续 长度为 t 的子区间 的不同数 的和 巧妙的动态规划 数据大, Dp可以 O(n) #include#include#include#includeconst int maxn = 1e6 +131;typedef long long ll;ll Dp[maxn]; ///总数int Num[maxn];原创 2016-03-14 10:54:31 · 411 阅读 · 0 评论 -
Uva 10157 (DP)
题目:给你一堆括号组成的字符串, 其长度就是字符长度, 其深度 问长度 为 n, 深度为 d 的串有多少种可能。分析:首先 Dp[L][D] 表示 长度为 L, 深度最大为 D 的字符串种数。 可以发现 Dp[L][D]=∑Dp[k][j−1]∗Dp[i−k−1][j]Dp[L][D] = \sum{Dp[k][j-1] * Dp[i-k-1][j]} 然后数据小, 直接写了Code:im原创 2016-07-27 08:59:59 · 353 阅读 · 0 评论