
动态规划
迷亭1213
帅帅帅
展开
-
四边形不等式应用
动态规划加速原理之四边形不等式动态规划的四边形不等式优化是对特定形式的状态转移方程进行优化的一种方法,该方法可以将复杂度由 O(n3)O(n^3)O(n3) 优化到 O(n2)O(n^2)O(n2)。设我们有状态转移方程m(i,j)={min{m(i,k−1)+m(k,j)+w(i,j)}i<j0i=jINFi>j m(i ,j) =\left\{\begin{array}{r...原创 2020-01-10 13:18:44 · 573 阅读 · 0 评论 -
树形动态规划题集
测试地址部分题面可能复制有问题,图片没有复制,有疑惑见原题面。1575:【例 1】二叉苹果树问题描述有一棵二叉苹果树,如果数字有分叉,一定是分两叉,即没有只有一个儿子的节点。这棵树共 N 个节点,标号 1 至 N,树根编号一定为 1。我们用一根树枝两端连接的节点编号描述一根树枝的位置。一棵有四根树枝的苹果树,因为树枝太多了,需要剪枝。但是一些树枝上长有苹果,给定需要保留的树枝数量,求最多...原创 2020-01-10 13:00:54 · 1339 阅读 · 1 评论 -
区间类动态规划题集
测试地址本文题面皆是复制网页,如果有格式问题参考原题面。1569:【 例 1】石子合并题意描述将 n 堆石子绕圆形操场排放,现要将石子有序地合并成一堆。规定每次只能选相邻的两堆合并成新的一堆,并将新的一堆的石子数记做该次合并的得分。请编写一个程序,读入堆数 n 及每堆的石子数,并进行如下计算:1、选择一种合并石子的方案,使得做 n−1 次合并得分总和最大。2、选择一种合并石子的方案,...原创 2020-01-06 22:24:17 · 897 阅读 · 1 评论 -
2019CSP-J普及组复赛题解
A.数字游戏题意描述小 K 同学向小 P 同学发送了一个长度为 8 的 01 字符串来玩数字游戏,小 P 同学想 要知道字符串中究竟有多少个 1。 注意:01 字符串为每一个字符是 0 或者 1 的字符串,如“101”(不含双引号)为一 个长度为 3 的 01 字符串。解题思路签到题。代码示例#include<bits/stdc++.h>...原创 2019-11-26 20:09:03 · 12808 阅读 · 0 评论 -
洛谷P1854 花店橱窗布置解题报告
题目描述某花店现有F束花,每一束花的品种都不一样,同时至少有同样数量的花瓶,被按顺序摆成一行,花瓶的位置是固定的,从左到右按1到V顺序编号,V是花瓶的数目。花束可以移动,并且每束花用1到F的整数标识。如果I < J,则花束I必须放在花束J左边的花瓶中。例如,假设杜鹃花的标识数为1,秋海棠的标识数为2,康乃馨的标识数为3,所有花束在放入花瓶时必须保持其标识数的顺序,即杜鹃花必须放在秋海棠左...原创 2019-03-09 12:38:40 · 1368 阅读 · 0 评论 -
2017蓝桥杯:包子凑数
标题:包子凑数小明几乎每天早晨都会在一家包子铺吃早餐。他发现这家包子铺有N种蒸笼,其中第i种蒸笼恰好能放Ai个包子。每种蒸笼都有非常多笼,可以认为是无限笼。每当有顾客想买X个包子,卖包子的大叔就会迅速选出若干笼包子来,使得这若干笼中恰好一共有X个包子。比如一共有3种蒸笼,分别能放3、4和5个包子。当顾客想买11个包子时,大叔就会选2笼3个的再加1笼5个的(也可能选出1笼3个的再加2笼4个的...原创 2019-03-02 21:05:44 · 1296 阅读 · 0 评论 -
背包问题的方案总数例题:货币系统
【例9-17】货币系统【问题描述】 给你一个n种面值的货币系统,求组成面值为m的货币有多少种方案。样例:设n=3,m=10,要求输入和输出的格式如下:【样例输入】3 10 1 2 ...原创 2019-03-01 13:39:46 · 3739 阅读 · 0 评论 -
分组背包例题
【问题描述】 一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn。这些物品被划分为若干组,每组中的物品互相冲突,最多选一件。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。【输入格式】 第一行:三个整数,V(背包容量,V<=200),N(物品数量,N<...原创 2019-03-01 13:07:57 · 3792 阅读 · 1 评论 -
洛谷P1091 合唱队形(dp)
题意简述:给一个序列,求最少去掉几个元素才能使得序列呈先上升后下降。解题思路:设f1[ i ] 为以第 i 个元素为尾的最长上升子序列,f2[ i ]为以第 i 个元素为起点的最长下降子序列,于是答案就是最小的 n - f1[ i ] - f2[ i ] + 1;代码示例:#include<iostream>#include<cstdio>using na...原创 2019-02-19 15:08:48 · 515 阅读 · 0 评论 -
友好城市-解题报告(动态规划)
测试地址:友好城市题意简述:Palmia国有一条横贯东西的大河,河有笔直的南北两岸,岸上各有位置各不相同的N个城市。北岸的每个城市有且仅有一个友好城市在南岸,而且不同城市的友好城市不相同。每对友好城市都向政府申请在河上开辟一条直线航道连接两个城市,但是由于河上雾太大,政府决定避免任意两条航道交叉,以避免事故。编程帮助政府做出一些批准和拒绝申请的决定,使得在保证任意两条航线不相交的情况下...原创 2019-02-19 14:30:24 · 2021 阅读 · 4 评论 -
潜水员解题报告(二维费用的背包问题)
【例5】潜水员【问题描述】潜水员为了潜水要使用特殊的装备。他有一个带2种气体的气缸:一个为氧气,一个为氮气。让潜水员下潜的深度需要各种的数量的氧和氮。潜水员有一定数量的气缸。每个气缸都有重量和气体容量。潜水员为了完成他的工作需要特定数量的氧和氮。他完成工作所需气缸的总重的最低限度的是多少?例如:潜水员有5个气缸。每行三个数字为:氧,氮的(升)量和气缸的重量: 3 36 120...原创 2019-02-24 16:08:42 · 1557 阅读 · 0 评论 -
没有上司的舞会
测试地址:地址描述Ural大学有N名职员,编号为1~N。他们的关系就像一棵以校长为根的树,父节点就是子节点的直接上司。每个职员有一个快乐指数,用整数 H_i 给出,其中 1≤i≤N。现在要召开一场周年庆宴会,不过,没有职员愿意和直接上司一起参会。在满足这个条件的前提下,主办方希望邀请一部分职员参会,使得所有参会职员的快乐指数总和最大,求这个最大值。输入格式第一行一个整数N。(1<=N...原创 2019-03-14 20:39:27 · 1095 阅读 · 0 评论 -
选课 0x50「动态规划」例题
描述学校实行学分制。每门的必修课都有固定的学分,同时还必须获得相应的选修课程学分。学校开设了 N(N≤300) 门的选修课程,每个学生可选课程的数量 M 是给定的。学生选修了这 M 门课并考核通过就能获得相应的学分。在选修课程中,有些课程可以直接选修,有些课程需要一定的基础知识,必须在选了其他的一些课程的基础上才能选修。例如《Windows程序设计》必须在选修了《Windows操作基础》之后才...原创 2019-03-14 20:49:05 · 861 阅读 · 0 评论 -
POJ2228 Naptime 解题报告(环形DP)
总时间限制: 1000ms 内存限制: 65536kB描述Goneril is a very sleep-deprived cow. Her day is partitioned into N (3 <= N <= 3,830) equal time periods but she can spend only B (2 <= B < N) not necessaril...原创 2019-03-16 12:27:14 · 1724 阅读 · 0 评论 -
POJ1179 Polygon解题报告 (区间规划)
测试地址:POJ1179题意简述:“多边形游戏”是一款单人益智游戏。开始时有一个由n个顶点构成的多边形。每个顶点被赋予一个整数值,每条边被赋予一个运算符“+”或“*”。所有边依次用整数从1到n编号。游戏第1步,将一条边删除。随后n-1步按以下方式操作:选择一条边E以及由E连接着的2个顶点V1和V2; 用一个新的顶点取代边E以及由E连接着的2个顶点V1和V2。将由顶点V1和V2的整数值...原创 2019-03-12 08:23:25 · 333 阅读 · 0 评论 -
例题:金字塔 解题报告(区间DP)
5302 金字塔0x50「动态规划」例题描述虽然探索金字塔是极其老套的剧情,但是有一队探险家还是到了某金字塔脚下。经过多年的研究,科学家对这座金字塔的内部结构已经有所了解。首先,金字塔由若干房间组成,房间之间连有通道。如果把房间看作节点,通道看作边的话,整个金字塔呈现一个有根树结构,节点的子树之间有序,金字塔有唯一的一个入口通向树根。并且,每个房间的墙壁都涂有若干种颜色的一种。探险队员...原创 2019-03-12 16:32:52 · 2311 阅读 · 0 评论 -
SARS病毒
由于本题原型是HDU2065,解题方法以及思路相同,故以HDU2065为例整理题解。Problem Description医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,腺嘧啶均是成对出现的。现在有一长度为N的字符串,满足一下条件:(1) 字符串仅由A,B,C,D四个字母组成;(2) ...原创 2019-07-14 22:29:37 · 1898 阅读 · 3 评论 -
st表
摘要ST表是一个用来处理区间最值查询(Range Maximum/Minimum Query)的离线算法。该算法分为离线预处理O(n log n)和查询O(1)两个部分,其用到了倍增的思想。某个区间查询问题是否适用ST表,关键在于其进行的操作是否允许区间重叠,例如max(a,b,c) = max{max(a,b),max(b,c)}就可以用ST表维护,而区间和问题则不能维护。问题描述给定一...原创 2019-07-16 18:31:16 · 4704 阅读 · 4 评论 -
Fish eating fruit
测试地址题意简述:树上任意两点之间的路径按照模 3 为 012 分类,将两点间距离加和,乘 2 即为答案。解题思路:可以采用树上dp解决,也可以点分治,这里先给出一种树上dp做法:dp[i][k] 表示距 i 模 3 为 k 的节点距离和。tc[i][k] 表示距 i 模 3 为 k 的节点数目。ans[k] 表示所有路径中模 3 为 k 的路径的总长度。目标答案是ans[k] ...原创 2019-09-24 09:01:45 · 464 阅读 · 0 评论 -
例题6:挖地雷(递归解法)
题意简述:给出一张有向无环图,以及每个节点的权值,求出一条权值和最大的路径(起点任意)。解题思路:这题满足无后效性与最优化原则,可以使用动态规划,但我情不自禁的就写成了深搜+记忆化,不过本质上相同嘛。代码很短,逻辑也很清晰,就是普普通通的dfs+记忆化。代码示例:#include<iostream>#include<cstdio>#include<v...原创 2019-02-19 12:12:39 · 1357 阅读 · 0 评论 -
洛谷P1020/NOIP1999 拦截导弹
题意简述:求最长不上升子序列的长度,并求出最少有几个不上升子序列。解题思路:第一问直接用dp做,有O(n^2)的也有优化后O(nlgn)的,我才用的是前者。第二问可以用一个数组h来记录当前所有系统的拦截高度,每次遇到一个新元素,在h数组中找一个大于 a[i] 的最小的元素,并将其更新为 h[ j ] = a[i],如果没有则将a[i]作为新元素添加进h数组。代码示例:#include...原创 2019-02-19 11:37:23 · 1002 阅读 · 0 评论 -
动态规划:铺砖问题
问题描述:给定n*m的格子,每个格子被染成了黑色或者白色。现在要用1*2的砖块覆盖这些格子,要求块与块之间互相不重叠,且覆盖了所有白色的格子,但不覆盖任意一个黑色格子。求一共有多少种覆盖方法,输出方案数对M取余后的结果。限制条件:1 <= n <= 15 1 <= m <= 15 2 <= M <= 10^9样例输入:n = 3m = 3...原创 2018-07-28 11:18:32 · 5136 阅读 · 0 评论 -
暑假练习:uva12563(01背包问题)
原题链接:uva12563解析: 这题我花了十几分钟就敲出来了,但是没通过,于是改了俩个多小时才发现少打了max....。 这题是典型的01背包问题,其中时间可以看作背包容量,每首歌就可以看作体积了,那么重量就是1。本题要求唱最多的歌的同时要尽可能唱的时间久一点。那d(i,j)表示在前i首歌中,剩余时间为t时的最多唱歌数。但是要注意的是,题目还要求输出唱歌的...原创 2018-07-21 19:14:11 · 380 阅读 · 0 评论 -
暑假练习:uva11400(最长上升子序列)
题目链接:uva11400解析:这题的题意比较难理解,题目给出每种灯泡的电压v,电源费用k,灯泡的费用c,灯泡数量l。那么其中一种灯泡需要花的钱d[i] = l[i] * c[i] + k[i]。现在要求求出最少费用,那问题就变成了:是前i种灯泡全用灯泡i省钱,还是前i种灯泡中选不同种灯泡省钱。状态d[i]就代表了前i种灯泡中最小费用,转移方程就是min{ d[j] + (s[i] - s[j...原创 2018-07-22 08:41:35 · 315 阅读 · 0 评论 -
UVa10934 装满水的气球
原题链接:UVa10934解析:设还剩i个气球,j次机会时能够测得的最大高度为d[i][j](换句话说,就是d[i][j]层内,可以用i个气球j次机会测出气球硬度为j),可以知道:如果此层气球炸了,那么就意味着d[i][j] - 1 层必须用i-1个气球,测试j-1次测出来,于是d[i][j] = d[i-1][j-1] + 1。 如果此层没有破裂,那么说明还有i个气球,j-1次机会来在...原创 2018-08-02 21:34:14 · 5866 阅读 · 0 评论 -
递推式计算与矩阵乘法 C++
以斐波那契数列为例,计算斐波那契数列的矩阵方法代码如下:(快速幂、矩阵乘法)《挑战程序设计竞赛第二版》P199#include<iostream>#include<vector>using namespace std;typedef vector<int> vec;typedef vector<vec> mat;int M = 1...原创 2018-07-29 20:22:32 · 565 阅读 · 0 评论 -
状态压缩DP:旅行商问题
题目描述:给定一个n个顶点组成的带权有向图的距离矩阵d( i , j ) ( INF表示没有边 )。要求从顶点0出发,经过每个顶点恰好一次后再回到顶点0.问所经过的边的总权重的最小值是多少?限制条件:2 <= n <= 15 0 <= d( i , j ) <= 1000题目解析:这个问题就是著名的旅行商问题(TSP)。所有可能的路线有(n-1)!种。这是一...原创 2018-07-28 12:02:06 · 319 阅读 · 0 评论 -
(环上)最大子段和
1.背景最大连续子段和是一类问题,即求一个序列最大连续子序列的和。问:给出n个元素分别为A1,A2,...,An,求出其最大连续子段和。2.求解思路2.1 动态规划:设A[ i ]为该序列第 i 个元素,C[ i ]存放前 i 个序列的最大子段和,那么C[ i ]有两种可能结果:2.2 问题2:A1,A2,...,An 首尾相连,求出该环上最大子段和。2.3 问题2...原创 2019-02-01 17:37:36 · 1447 阅读 · 0 评论 -
哈理工第八届程序设计竞赛同步赛(高年级)B题(铺砖问题)解题报告。
题目描述:小乐乐想要给自己搭建一个积木城堡。积木城堡我们假设为n*m的平面矩形。小乐乐现在手里有1*2,2*1两种地砖。小乐乐想知道自己有多少种组合方案。输入描述:第一行输入整数n,m。(1<=n,m<=10)输出描述:输出组合方案数。样例输入2 3样例输出3解析:本题是动态规划中的状态压缩经典题型,铺砖问题的模板。想解此题需...原创 2018-12-05 13:51:43 · 6255 阅读 · 0 评论 -
最长上升子序列与最长公共子序列 C/C++
最长上升子序列:思路:用数组b[1000]存放在i之前共有多少个上升子字符。并找出其中最长的,记录为len,遍历完0-i之后的len即为i之前最长上升子序列,因此用a[i]记录在i之前的最长上升子序列,共下一个元素参考。在听了郭炜老师的课后,按照他的思路,把这俩题解出来,供以后回忆。#include<stdio.h>#include<string.h>in...原创 2018-03-21 14:41:20 · 8600 阅读 · 0 评论 -
最长公共上升子序列(DP)
问题描述:在动态规划中,最长公共子序列(LCS)与最长上升子序列(LIS)是基础的线性DP。现在要求求出两个不等长序列的最长公共上升子序列,故名思意,定义类似前两个问题。解题思路:如果已经会求最大公共子序列,那么自然就可以想到,只需在最长公共子序列上找一遍最长上升子序列即可。然而具体的状态转移方程,只要在两个元素判等后进行进一步操作即可,稍微注意一下状态的始末,即k为何从0开始而不是1。该方法...原创 2019-02-03 21:01:52 · 8330 阅读 · 3 评论 -
POJ1934 Trip(输出所有最长公共子序列)
题意简述:两个字符串都仅由小写字母构成,且长度不超过80。要求按照字典序无重复的输出所有的最长公共子序列。原题链接:POJ1934解题思路:都是这种题怎么能怪我不学习?我昨天用我自己的思路写了一天,经过昨天一天的改进,还是有各种错误,我都没法证明为什么错了,而且我觉得我写的明明和这个解法异曲同工! 首先是求出最长公共子序列,我的写法是O(n^2)级别的,好在数据中的n只有80。...原创 2019-02-15 19:36:53 · 1352 阅读 · 0 评论 -
例题:混合背包
Problem Description一个旅行者有一个最多能用V公斤的背包,现在有n件物品,它们的重量分别是W1,W2,...,Wn,它们的价值分别为C1,C2,...,Cn。有的物品只可以取一次(01背包),有的物品可以取无限次(完全背包),有的物品可以取的次数有一个上限(多重背包)。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。Input输入有多组数据,对于输...原创 2019-02-24 14:44:22 · 1775 阅读 · 0 评论 -
NOIP2008 传纸条(线性DP)
题目描述:小渊和小轩是好朋友也是同班同学,他们在一起总有谈不完的话题。一次素质拓展活动中,班上同学安排做成一个m行n列的矩阵,而小渊和小轩被安排在矩阵对角线的两端,因此,他们就无法直接交谈了。幸运的是,他们可以通过传纸条来进行交流。纸条要经由许多同学传到对方手里,小渊坐在矩阵的左上角,坐标(1,1),小轩坐在矩阵的右下角,坐标(m,n)。从小渊传到小轩的纸条只可以向下或者向右传递,从小轩传给小渊的...原创 2019-02-18 17:50:00 · 525 阅读 · 0 评论 -
庆功会 解题报告(多重背包模板)
Problem Description为了庆贺班级在校运动会上取得全校第一名成绩,班主任决定开一场庆功会,为此拨款购买奖品犒劳运动员。期望拨款金额能购买最大价值的奖品,可以补充他们的精力和体力。Input对于每组数据的第一行二个数n(n<=500),m(m<=6000),其中n代表希望购买的奖品的种数,m表示拨款金额。接下来n行,每行3个数,v、w、s,分别表示第I种奖品的价格、...原创 2019-02-23 15:55:13 · 2131 阅读 · 2 评论 -
POJ1952 线性动态规划
题意简述:就是说给出一个序列,求出其最长下降子序列(类比最长上升子序列),以及个数。同时要求统计个数时不能有重复,重复的意思是该序列每一个对应元素与另一个序列相等。原题链接:POJ1952解题思路:又一次栽在题意上,我忽略了子串重复这个要求,导致我刚开始的做法与正确答案大相径庭。具体思路是,在求最短下降子序列的过程中想办法求出其个数。而如何求出其个数成了这题最后一个难点。下面的代码主体...原创 2019-02-12 18:40:53 · 647 阅读 · 0 评论 -
TVYJ1061 解题报告(线性DP)
题意简述:一个公司有三个移动服务员。如果某个地方有一个请求,某个员工必须赶到那个地方去(那个地方没有其他员工),某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。公司必须满足所有的请求。目标是最小化公司花费。输入格式:第一行有两个整数L,N(3<=L<=200, ...原创 2019-02-18 13:11:17 · 664 阅读 · 0 评论 -
TVYJ1172 自然数拆分Lunatic版(完全背包问题)
测试地址:链接题意描述:给定一个自然数N,要求把N拆分成若干个正整数相加的形式,参与加法运算的数可以重复。求拆分的方案数 mod 2147483648的结果。1≤N≤4000。输入格式:一个整数n。输出格式:输出一个数,即所有方案数因为这个数可能非常大,所以你只要输出这个数 mod 2147483648 的余数即可。解题思路:首先2147483648是一个很大的数,至少用...原创 2019-02-22 16:46:02 · 925 阅读 · 2 评论 -
背包问题-笔记整理
本文为个人笔记,这算是我第三次系统的学背包问题。根据老师所写课件,所记为个人感悟以及知识点梳理,方便日后复习,如有不足之处请斧正,感谢。1.背景:1.1 什么是背包问题:背包问题指这样一类问题,题意往往可以抽象成:给定一组物品,每种物品都有自己的重量和价格,在限定的总重量内,我们如何选择,才能使得物品的总价格最高。(来自百度百科)1.2 背包问题的种类:就ACM或者其它算法竞赛...原创 2019-02-24 16:18:10 · 63916 阅读 · 13 评论 -
机器分配(动态规划)解题报告
测试地址:洛谷P2066题意简述:一共有N个工厂,M台机械,每个工厂获得不同台数的机器其产生的价值也不同,现给出N、M,求最大总价值以及分配方案。解题思路:很明显,这题划分的阶段应该是“工厂数”,状态应该是“机器数”,那么很自然就会想到用 f( i , j ) 来表示有 i 个工厂,分配 j 台机器时最大价值。我们最终要求的就是f( N , M)。很显然,假设我们想求 i 个工厂 j 台机...原创 2019-02-22 13:50:10 · 2357 阅读 · 0 评论