动态规划
西行妖下的亡灵
这个作者很懒,什么都没留下…
展开
-
数塔(状态转移方程的概念)
动态规划的核心往往是一个状态转移方程,而何谓状态呢?就是对于某特定事物在某一个位置时具有的属性,比如所携带的数值或者是其他的一些特性。状态转移又是什么呢?就是与当前状态相关的若干的状态通过某种特定方式转移到了当前状态上,在这期间所携带的特性可能发生了一些改变。比如说一个楼梯,我可以从两个台阶前迈过来,也可以从一个台阶前走过来,这都是状态转移的一种。同样的,在这个题里,既然是要求一条和最大的路线...原创 2019-07-29 00:05:39 · 332 阅读 · 0 评论 -
UPC 攀登宝塔(基本状态转移)
第一个基本状态是每个台阶是以什么样的跨度转移过来的(一个格子之前还是两个格子之前),第二个基本状态就是主角本身是否处于灵力CD的状态。所以对于DP数组需要开二维,一维记录灵力状态,另一维记录跨度范围。//#include<pch.h>#include <iostream>#include <cstdio>#include <bits/std...原创 2019-07-31 23:27:25 · 155 阅读 · 0 评论 -
UPC Fstring字符串(基本状态转移)
既然不能存在ABC三个字母连续出现的情况,那么假定每一个字母都需要由在他之前的两个字母决定,那么就会有两种情况:前两个字母相等和前两个字母不等。如果前两个字母相等,那么那两个字母之前的组合可能性都是一样的,后一个字母的状态只相当于复制了前一个状态,比如A到AA,B到BB,C到CC,都是三种情况,那么第三个字母是任意情况。如果前两个字母不等,那么就需要后一个字母的状态减去前一个字母的状态(减...原创 2019-07-31 23:33:20 · 121 阅读 · 0 评论 -
ICPC 2018焦作赛区网络赛部分题解
transport ship(运输船)题目描述There are N different kinds of transport ships on the port. The i^th kind of ship can carry the weight of V[i] and the number of the ithkind of ship is 2C[i]-1. How many di...原创 2019-08-14 01:14:12 · 164 阅读 · 0 评论 -
UPC 桐桐的爬山计划
本题的状态量有两个,一个是攀爬次数,一个是当前位置。所以开一个二维数组,数组值为所记录的高度。状态转移则由当前高度加减攀爬高度所对应的数组值实现,也就是dp[i][j]=min(dp[i][j-a[i]](代表本次攀爬是向上的),dp[i][j]+a[i])代表本题攀爬是向下的。不过在枚举当前位置的时候可能会出现上下越界问题和位置存在性问题(就是说那几次攀爬可不可能到达某些位置),都需要一一判断。...原创 2019-08-01 23:38:55 · 730 阅读 · 0 评论 -
Newcoder 被三整除的子序列(基本状态转移)
给你一个长度为50的数字串,问你有多少个子序列构成的数字可以被3整除答案对1e9+7取模被三整除即各位数的和可以被三整除。显然每选择一个数所造成的结果都会从原来已知的结果加上一些影响而得到,这里可以找几个数发现规律:1563:当只有1的时候不存在被3整除的情况,只有15的时候存在一种被3整除的情况(15),只有156的时候存在三种被三整除的情况(6,15,156),1563的时候存在...原创 2019-08-13 20:01:59 · 410 阅读 · 0 评论 -
最长上升子序列模板(JAVA,C++通用模板)
1.动态规划(平方级复杂度)import java.util.*;import java.math.*;import java.io.*;import java.text.*;public class Main{ static int a[]=new int[5000]; static int status[]=new int[50000]; public ...原创 2019-08-15 23:33:30 · 140 阅读 · 0 评论 -
UPC packing(打包)(组合背包)
It was bound to happen. Modernisation has reached the North Pole. Faced with escalating costs for feeding Santa Claus and the reindeer, and serious difficulties with security, NP Management has deci...原创 2019-08-10 10:33:31 · 216 阅读 · 0 评论 -
CT1428 题解(待更)
A 机器人军团典型的最长上升子序列问题,只不过这里是不下降子序列,与前者只有一个符号的区别//#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include<queue>#include <map>#i...原创 2019-08-15 23:40:10 · 164 阅读 · 0 评论 -
GCPC2017 部分题题解
C joyrideIt is another wonderful sunny day in July – and you decided to spend your day together with your little daughter Joy. Since she really likes the fairy-park in the next town, you decided to ...原创 2019-08-26 21:43:00 · 484 阅读 · 0 评论 -
UPC 维修栅栏(基本状态转移)
这个题的基本状态是当前这块木头需要不需要维修,第二状态是要以怎么样的形式(连续多少块)维修,一一枚举取最大值即可。值得一说的是,除了0状态(起始状态),其余都要初始化为最大值。而第二状态的枚举需要从0开始,0代表现有的所有都全修,到i-1为止,i-1代表就修它自己(这个长度由i-j确定)。//#include<pch.h>#include <iostream>...原创 2019-07-31 11:29:32 · 175 阅读 · 0 评论 -
NOIP 2002 过河卒(DP递推)
棋盘上A点有一个过河卒,需要走到目标B点。卒行走的规则:可以向下、或者向右。同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点。因此称之为“马拦过河卒”。棋盘用坐标表示,A点(0, 0)、BB点(n, m)(n,m为不超过2020的整数),同样马的位置坐标是需要给出的。现在要求你计算出卒从A点能够到达B点的路径的条数,假设马的位置是固定不动的,并不是卒走...原创 2019-04-24 00:58:40 · 649 阅读 · 0 评论 -
ICPC2018 Nakhon Pathom(泰国佛统区域赛)- Evolution Game(进化游戏)(状态转移方程)
题目描述In the fantasy world of ICPC there are magical beasts. As they grow, these beasts can change form, and every time they do they become more powerful. A beast cannot change form completely arbitra...原创 2019-04-29 09:26:25 · 245 阅读 · 0 评论 -
DAG上的最长最短路
如果把当前所需要凑齐的面值设为一个状态量的话,那么这个题就是由S到0(一文钱没有凑够和完全凑够的两个端点)的一个DAG(因为钱不能取回),仍然是使用记忆化搜索对这个图进行遍历即可。在搜索时,可以有两个方式标记已经被访问过的状态:初始DP为-1(无论是什么数都要和题目中可能出现的状态量区分开),或者是用VIS数组标记这个状态。在搜索开始之前也需要注意一些初始状态的设定,比如这里,如果一分...原创 2019-07-29 08:50:17 · 384 阅读 · 0 评论 -
UPC 圣诞树(DAG模型)
假设圣诞树从1层到n层的排列形式是类似于一张链状的图,那么在其边缘衍生出的若干条指向下层某元素的边与链状图就组成了一张有向无环图(只能指向一个元素且下层元素不可指向上层)。对每个点进行记忆化搜索(状态转移:现在的值加上以下所连接的值),再取最大值即可。//#include<pch.h>#include <iostream>#include <cstdio&g...原创 2019-07-29 11:08:26 · 368 阅读 · 0 评论 -
UPC 传球游戏(基本状态转移)
这个题的情况可以表示为:每个状态都由两个状态所决定,也就是左边的人传球和右边的人传球,并且这里是求和问题而不是求最值,所以直接把两个状态求和即可。//#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include <map>...原创 2019-07-29 11:22:47 · 172 阅读 · 0 评论 -
UPC 黑熊过河(基本状态转移)
从题目中看出,在1~n的范围之外还存在两个起始终末端点:0和n+1,而在2~n+1范围内的状态都是可以由i-1和i-2所转移得来,所以将其划分为一个部分,而0与1不能有这样的状态转移方式,所以是另一个单独解决的部分。这个题没有必要担心存在那种跳回去又折回来的情况,因为在最优解中肯定是在起始端点那一侧向终末端点那一侧跳的,否则就是白白浪费体力。除了n+1这个状态之外,所有状态都必须确认当前状...原创 2019-07-30 22:07:09 · 227 阅读 · 0 评论 -
UPC 抢金块(普通的状态转移)
此题的初始状态是1,终末状态位于n,而状态转移范围为s~t,所以对于每一状态,只需枚举其合法的转移方式并取最大值即可。#include<pch.h>#include <iostream>#include <cstdio>#include <bits/stdc++.h>#include <map>#include <a...原创 2019-07-30 22:12:59 · 293 阅读 · 0 评论 -
HDU 6570 Wave(波浪)(基本状态转移)
Problem DescriptionAvin is studying series. A series is called "wave" if the following conditions are satisfied:1) It contains at least two elements;2) All elements at odd positions are the same;...原创 2019-07-28 23:36:05 · 347 阅读 · 1 评论 -
牛客暑期赛第一场:ABBA (状态转移)
本题一看像是个排列组合的问题,因为确实没有什么规律可言,只是子字符串的穿插堆砌而已。不过依据贪心思想,就可以对这个题目“假定”出一条规律:字符串内先出现的A,划分为AB所有,先出现的B,划分为BA所有。那么就可以推出这样的结论:(A-B)的个数如果小于n,或者(B-A)的个数如果小于m,那么这个字符串肯定不合法(基本条件:n个AB和m个BA不满足)。那么在推导满足条件的字符串个数时,就可以用到...原创 2019-07-19 11:53:15 · 103 阅读 · 0 评论 -
LCS-最长公共子序列的免去边界初始化的一些模板(记忆化搜索+记录路径的DP+优化空间的DP)
我们知道,输入一个字符串的时候一般是以0为下标的,而在最长公共子序列的计算中,任意字符串对空字符串的最长公共子序列都是0(对面啥都没有还有什么“公共”可言)。但是一般的输入下,0号位置是存储位置,这就因为无法表示而无法解决零长度这个问题,从而需要对结果矩阵进行边界初始化,也就是说把dp[0][i],dp[j][0]均初始化为0(i,j∈length(StringA),length(Strin...原创 2019-05-18 09:34:50 · 259 阅读 · 0 评论 -
FZU Code Carnival -Winner Winner(赢家,赢家)(位运算与状态压缩)
The FZU Code Carnival is a programming competetion hosted by the ACM-ICPC Training Center of Fuzhou University. The activity mainly includes the programming contest like ACM-ICPC and strive to provide...原创 2019-05-08 00:35:33 · 198 阅读 · 0 评论 -
树形DP初步与区间DP初步(不定更)
树形DP就是在数据树上进行状态转移的算法。一般这个状态转移数组会存在三个维度:当前是index号节点为根节点的子树,已经选择了N个节点,这个节点选不选(或者其他)。一般套路有:链式前向星或者向量数组建树 在树上进行DFS例题:P1352 没有上司的舞会本题就是一个很典型的树状结构上跑DP的例子。由题意可知:对于每一个节点的状态都需要知道它当前的编号和当前节点有没有被选上,也就是...原创 2019-08-12 23:11:36 · 168 阅读 · 0 评论