
动态规划
动态规划
正月看飞雪
这个作者很懒,什么都没留下…
展开
-
背包九讲
01背包完全背包完全背包+ 二进制优化 + 单调队列优化多重背包混合背包二维费用背包分组背包有依赖的背包问题背包求方案数背包求具体方案数...原创 2020-02-06 12:12:22 · 207 阅读 · 0 评论 -
HDU - 2089 不要62 数位DP
思路由于HDU数据范围不大, 所以直接暴力打表就可以过,但是数据范围如果扩大到10^9, 就需要数位DP来做f[i ,j] 存的 一共i 位, 最高位是j的方案数在递推时, 对每个不合法的情况进行舍弃代码#include <iostream>#include <cstring>#include <algorithm>#include <...原创 2020-04-30 21:25:30 · 205 阅读 · 0 评论 -
数字游戏 求不降数 数位DP
题目描述科协里最近很流行数字游戏。某人命名了一种不降数,这种数字必须满足从左到右各位数字呈非下降关系,如 123,446。现在大家决定玩一个游戏,指定一个整数闭区间 [a,b],问这个区间内有多少个不降数。输入格式输入包含多组测试数据。每组数据占一行,包含两个整数 a 和 b。输出格式每行给出一组测试数据的答案,即 [a,b] 之间有多少不降数。数据范围1≤a≤b≤231−1...原创 2020-04-30 15:13:37 · 1202 阅读 · 0 评论 -
URAL - 1057 Amount of Degrees 数位DP
思路对于一个数 n, 我们求他的 0 - n 的满足要求的方案数, 对于区间[l, r] = sum[r] - sum[l - 1]我们先预处理组合数, 存下对应的值我们这时取出n的每一位的值, 我们去判断一下这位的树, 我们直接加上这一位是0的情况, 就是这以为不选1, 前面选了last个1, 后面再选k - last个1, 就是f[i], k - last], 对于这一位大于1这种情...原创 2020-04-30 13:45:25 · 208 阅读 · 0 评论 -
皇宫看守 树形DP + 状态机
样例样例输入61 30 3 2 3 42 16 2 5 63 5 04 4 05 11 06 5 0样例输出25思路代码#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 1510;int...原创 2020-04-29 23:42:11 · 223 阅读 · 0 评论 -
POJ - 1463 Strategic game 树形DP
题目大意给一棵树, 在节点上放一个士兵, 可以把与节点相连的边都监测到, 求把所有的边都监测到所放的最少的士兵样例Sample Input40:(1) 11:(2) 2 32:(0)3:(0)53:(3) 1 4 21:(1) 02:(0)0:(0)4:(0)Sample Output12思路代码#include <iostream>#...原创 2020-04-29 22:57:42 · 234 阅读 · 0 评论 -
POJ - 1191 / NOI 1999 棋盘分割 记忆化搜索DP
思路代码#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <cmath>using namespace std;const int N = 15, M = 9;int n;double f[M]...原创 2020-04-28 15:44:45 · 195 阅读 · 0 评论 -
NOIP2003提高组 加分二叉树 区间DP+记录方案
题目描述设一个n个节点的二叉树tree的中序遍历为(1,2,3,…,n),其中数字1,2,3,…,n为节点编号。每个节点都有一个分数(均为正整数),记第i个节点的分数为di,tree及它的每个子树都有一个加分,任一棵子树subtree(也包含tree本身)的加分计算方法如下:subtree的左子树的加分 × subtree的右子树的加分 + subtree的根的分数若某个子树为空,规定其加...原创 2020-04-28 14:13:40 · 191 阅读 · 0 评论 -
划分凸多边形 区间DP + 高精度运算
思路对于每个三角形, 我们的len从3开始枚举, f[l, r]代表区间[l, r]的最小值, 然后我们就从一般的区间DP角度去做, 就可以得到样例的结果#include <iostream>#include <cstring>#include <algorithm>using namespace std;const int N = 100...原创 2020-04-28 11:34:38 · 219 阅读 · 0 评论 -
POJ - 1185 炮兵阵地 状态压缩DP / 3状态
思路代码#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <vector>using namespace std;const int N = 13, M = 1 << 10;int g...原创 2020-04-27 15:47:41 · 156 阅读 · 0 评论 -
POJ - 3254 Corn Fields 状态压缩DP/填充网格图形
思路#include <iostream>#include <cstring>#include <algorithm>#include <cstdio>#include <vector>using namespace std;const int N = 14, M = 1 << 12, mod = 1e8...原创 2020-04-27 12:49:18 · 195 阅读 · 0 评论 -
SGU - 223 Little Kings 状态压缩DP
思路用f[i, k, a] += f[i - 1, k - cnt[a], b]代表状态转移, 其中, i代表第i行, k代表有k个国王, a 代表状态aa , b是两个二进制数, 位置上是1代表这个位置有国王, 反之, 则没有a为合法状态是a不存在相邻两个1, b 可以转移到 a 的条件是 a & b == 0,且 a | b 不存在两个相邻的1#include <i...原创 2020-04-27 11:21:00 · 223 阅读 · 0 评论 -
POJ 2411 Mondriaan's Dream 状态压缩DP
思路用二进制表示当前行的状态, 0表示这个位置是空的, 1表示当前位置是填充了的, 而且会在i + 1行的这个位置填充上, 即是这个位置存在一个1X2的小矩形, 且这是这个矩形的上半部上一行的状态 k, 这一行的状态j , 满足要求的状态为 1: i & k = 0 2:i | k 的值的连续的0的个数为偶数#include <iostream>#include...原创 2020-04-26 19:09:50 · 164 阅读 · 0 评论 -
LeetCode 309. 最佳买卖股票时机含冷冻期 状态机 3状态
题目描述给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 。设计一个算法计算出最大利润。在满足以下约束条件下,你可以尽可能地完成更多的交易(多次买卖一支股票):你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。卖出股票后,你无法在第二天买入股票 (即冷冻期为 1 天)。示例:输入: [1,2,3,0,2]输出: 3 解释: 对应的交易状态为: [买...原创 2020-04-26 10:53:15 · 200 阅读 · 0 评论 -
LeetCode 188. 买卖股票的最佳时机 IV 状态机
题目描述给定一个数组,它的第 i 个元素是一支给定的股票在第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你最多可以完成 k 笔交易。注意: 你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [2,4,1], k = 2输出: 2解释: 在第 1 天 (股票价格 = 2) 的时候买入,在第 2 天 (股票价格 = 4) 的时候卖出,这笔...原创 2020-04-26 10:22:10 · 208 阅读 · 0 评论 -
大盗阿福 状态机模型 2状态
题目描述阿福是一名经验丰富的大盗。趁着月黑风高,阿福打算今晚洗劫一条街上的店铺。这条街上一共有 N 家店铺,每家店中都有一些现金。阿福事先调查得知,只有当他同时洗劫了两家相邻的店铺时,街上的报警系统才会启动,然后警察就会蜂拥而至。作为一向谨慎作案的大盗,阿福不愿意冒着被警察追捕的风险行窃。他想知道,在不惊动警察的情况下,他今晚最多可以得到多少现金?输入格式输入的第一行是一个整数 T,...原创 2020-04-26 10:05:03 · 195 阅读 · 0 评论 -
Google Kickstart2019 Round B Problem B Energy Stones 贪心+DP
题目描述岩石怪物杜达生活在魔法森林中,他在午餐时收集了N块能量石准备开吃。由于他的嘴很小,所以一次只能吃一块能量石。能量石很硬,吃完需要花不少时间。吃完第 i 块能量石需要花费的时间为Si秒。杜达靠吃能量石来获取能量。不同的能量石包含的能量可能不同。此外,能量石会随着时间流逝逐渐失去能量。第 i 块能量石最初包含Ei单位的能量,并且每秒将失去Li单位的能量。当杜达开始吃一块能量...原创 2020-04-25 19:35:01 · 380 阅读 · 0 评论 -
NOIP2018提高组 货币系统 背包问题求方案数变形
题目描述在网友的国度中共有 n 种不同面额的货币,第 i 种货币的面额为 a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为 n、面额数组为 a[1…n] 的货币系统记作 (n,a)。在一个完善的货币系统中,每一个非负整数的金额 x 都应该可以被表示出,即对每一个非负整数 x,都存在 n 个非负整数 t[i] 满足 a[i]× t[i] 的和为 x。然而,在网友的国度中...原创 2020-04-25 13:54:34 · 280 阅读 · 0 评论 -
NOIP2006提高组 金明的预算方案 分组背包变形
题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过N元钱就行”。今天一早,金明就开始做预算了,他把想买的物品分为两类:主件与附件,附件是从属于某个主件的,下表就是一些主件与附件的例子:如果要买归类为附件的物品,必须先买该附件所属的主件。每个主件可以有0个、...原创 2020-04-25 12:50:29 · 197 阅读 · 0 评论 -
NOIP2000提高组第四题:方格取数 DP
题目描述设有 N×N 的方格图,我们在其中的某些方格中填入正整数,而其它的方格中则放入数字0。某人从图中的左上角 A 出发,可以向下行走,也可以向右行走,直到到达右下角的 B 点。在走过的路上,他可以取走方格中的数(取走后的方格中将变为数字0)。此人从 A 点到 B 点共走了两次,试找出两条这样的路径,使得取得的数字和为最大。输入格式第一行为一个整数N,表示 N×N 的方格图。接下...原创 2020-04-22 22:20:30 · 643 阅读 · 0 评论 -
POJ - 1050 To the Max 最大子矩阵和
题目描述求最大的子矩阵的和样例Sample Input40 -2 -7 09 2 -6 2-4 1 -4 1 -1 8 0 -2Sample Output15最大子矩阵为9 2 -6 -4 1 -4 -1 8 0 思路把一列的元素(1 - n个元素相加), 然后把这这些元素的和看做一个数, 这样就转换成了dp经典问题:求最大连续子序列的和这里枚举每一...原创 2020-03-26 16:19:07 · 163 阅读 · 0 评论 -
二进制状态压缩 CH0103 最短Hamilton路径 (旅行商问题)
题目大意给定一张 n 个点的带权无向图,点从 0~n-1 标号,求起点 0 到终点 n-1 的最短Hamilton路径。 Hamilton路径的定义是从 0 到 n-1 不重不漏地经过每个点恰好一次。输入格式第一行输入整数n。接下来n行每行n个整数,其中第i行第j个整数表示点i到j的距离(记为a[i,j])。对于任意的x,y,z,数据保证 a[x,x]=0,a[x,y]=a[y,...原创 2020-03-12 15:21:59 · 317 阅读 · 0 评论 -
cf : Array Shrinking【dp】
题目大意给定一个长度为n的数组,相邻的两个数字如果相同就可以合并成一个比他们大一的数字,问:最后可以达到的最短的数组长度为多少样例input54 3 2 2 3output2样例解释:3,4位的2合并成 3 --> 4 3 3 3 2 3号位的合并成4 --> 4 4 31 2 号位4合并成5 --> 5 3答案就是 2思路用二维数组将数组在对角...原创 2020-03-11 11:56:37 · 378 阅读 · 1 评论 -
POJ - 2228 Naptime 环形DP + 滚动数组
问题描述在某个星球上,一天由 N 个小时构成,我们称0点到1点为第1个小时、1点到2点为第2个小时,以此类推。在第 i 个小时睡觉能够恢复Ui点体力。在这个星球上住着一头牛,它每天要休息B个小时。它休息的这B个小时不一定连续,可以分成若干段,但是在每段的第一个小时,它需要从清醒逐渐入睡,不能恢复体力,从下一个小时开始才能睡着。为了身体健康,这头牛希望遵循生物钟,每天采用相同的睡觉计划。...原创 2020-02-08 17:10:52 · 419 阅读 · 0 评论 -
POJ - 3585 Accumulation Degree 树形DP + 二次扫描 + 换根法 + 最大流问题
题目描述给定n个点, n-1条边, 边上有权值代表流量, 与网络流最大流问题相似问以任意一点为起点, 全图的最大流量是多少输入包括多组数据样例输入样例:151 2 111 4 133 4 54 5 10输出样例:26样例分析 5个点, 4条边。当以4为起点时, 得到最大流量为26。...原创 2020-02-08 15:28:42 · 400 阅读 · 0 评论 -
背包问题:有依赖的背包问题 【树形DP与背包问题的结合】
问题描述有 N 个物品和一个容量是 V 的背包。物品之间具有依赖关系,且依赖关系组成一棵树的形状。如果选择一个物品,则必须选择它的父节点。如果选择物品5,则必须选择物品1和2。这是因为2是5的父节点,1是2的父节点。每件物品的编号是 i,体积是 vi,价值是 wi,依赖的父节点编号是 pi。物品的下标范围是 1…N。求解将哪些物品装入背包,可使物品总体积不超过背包容量,且总价值最大。...原创 2020-02-07 16:30:35 · 546 阅读 · 0 评论 -
树形DP:CH5410 没有上司的舞会
树形DP 任选一个节点为根节点,从而定义出每个节点的深度和每棵子树的根。在树上设计动态规划算法时,一般就以节点从深到浅(子树从小到大)的顺序作为DP的“阶段”。DP的状态表示中,第一维通常是节点编号(代表以该节点为根的子树)。大多数时候,我们采用递归的方式实现树形动态规划。对于每个节点x,先递归在它的每个子节...原创 2020-02-07 14:41:16 · 434 阅读 · 0 评论 -
POJ - 1179 Polygon 区间DP
题目大意给定n个点,每次去掉一条边,将边连接的两个点根据边上的运算符运算合成一个点, 问最后剩下的那个点的值最大是多少输出那个值 和 第一次删除可以达到最后结果的点样例Sample Input4t -7 t 4 x 2 x 5Sample Output331 2思路 对环进行常见的处...原创 2020-02-06 18:41:15 · 228 阅读 · 0 评论 -
动态规划:线性DP
线性DP定义 线性DP:即线性动态规划,不局限于“线性时间复杂度”的一维动态规划。与数学中的“线性空间”类似,如果一个动态规划算法的“状态”包含多个维度,但在每个维度上都具有“线性”变化的“阶段”,那么该动态规划算法同样称为“线性DP"。在这类问题中,需要计算的对象表现出明显的维度以及有序性,每个状态的求解...原创 2020-02-05 14:18:42 · 456 阅读 · 0 评论 -
POJ - 3903S tock Exchange 最长上升子序列 +二分查找
题目描述给定一个序列, 求他的最长上升子序列样例Sample Input6 5 2 1 4 5 3 3 1 1 1 4 4 3 2 1Sample Output3 1 1思路由于数据范围很大, 不能用O(n^2)扫描的方法,会TLEO(n^2)代码#include<iostream>#include<cstring>#includ...原创 2020-02-04 20:23:56 · 343 阅读 · 0 评论 -
POJ 3666 Making the Grade 线性DP
题目大意给定长度为N的序列A,构造一个长度为N的序列B,满足:1、B非严格单调,即B1≤B2≤…≤BN或B1≥B2≥…≥BN。2、最小化 S=∑Ni=1|Ai−Bi|。只需要求出这个最小值S。输入格式第一行包含一个整数N。接下来N行,每行包含一个整数Ai。输出格式输出一个整数,表示最小S值。数据范围1≤N≤2000,0≤Ai≤109样例`输入样例:71324...原创 2020-02-04 16:20:14 · 361 阅读 · 0 评论 -
CH 5101 :LCIS(最长公共上升子序列) 线性DP (“代码等价转化”优化程序)
题目大意给定两个序列,求他们的最长公共上升子序列样例输入样例:42 2 1 32 1 2 3输出样例:2思路状态表示F[i, j] 表示 A1 - Ai 与 B1 - Bj 可以构成的以 Bj 为结尾的LCIS的长度当Ai != Bj 时, F[i, j] = F [i - 1, j]当Ai = Bj 时, F[i, j] = 前面最长上升公共子序列 + 1这样...原创 2020-02-04 13:30:49 · 358 阅读 · 0 评论 -
POJ - 2279 Mr. Young's Picture Permutations 线性DP + 5维DP
问题描述有 N 个学生合影,站成左端对齐的 k 排,每排分别有 N1,N2,…,Nk 个人。 (N1≥N2≥…≥Nk)第1排站在最后边,第 k 排站在最前边。学生的身高互不相同,把他们从高到底依次标记为 1,2,…,N。在合影时要求每一排从左到右身高递减,每一列从后到前身高也递减。问一共有多少种安排合影位置的方案?下面的一排三角矩阵给出了当 N=6,k=3,N1=3,N2=2,N3=1...原创 2020-02-03 19:36:24 · 615 阅读 · 0 评论 -
最长公共子序列及其序列打印【HDU 1159】
Common SubsequenceTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 56486 Accepted Submission(s): 26102Problem DescriptionA subsequence ...原创 2019-12-01 00:19:26 · 424 阅读 · 0 评论