动态规划
文章平均质量分 64
INCINCIBLE
这个作者很懒,什么都没留下…
展开
-
HN2015集训 永远亭的竹笋采摘
第一反应肯定是dp啦,然后就会愉快的T成一头象拔蚌。 那么,说说正解吧。 显然,选取的区间一定可以是两头为差值最小的。那就好办了,只需要预处理出所有的这样的区间,再dp即可,由于数据是随机生成的,所以这样的区间不会太多,有人验证了,好像是O(n)级别的。 预处理怎么搞?分块优化,pre[i][j]表示在第i块内的数,与j差值的最小值。每一块内的数取出来排序,两个下标跟着动就行了。 然后把那些原创 2017-05-26 14:46:04 · 820 阅读 · 0 评论 -
记忆化搜索专题--nkoj3699送比萨
P3699送披萨时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限2000ms问题描述 何老板开了一家披萨店,有一天突然收到了n个客户的订单。 何老板所在的城市只有一条笔直的大街,我们可以将它想象成数轴,其中位置0是何老板的披萨店,第i个客户所在的位置为Pi,每个客户的位置都不同原创 2016-08-28 20:11:18 · 881 阅读 · 0 评论 -
记忆化搜索专题--nkoj3698方块消除
P3698方块消除时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms问题描述有n个带颜色的方块排成一排,相同颜色的方块连成一段同色区域,如下图所示:游戏时,玩家可以任选一段同色区域,将其消去。设消去的这段包含x个相同颜色的方块,则此次消除操作的得分为x^2。然后右边的原创 2016-08-28 20:06:42 · 746 阅读 · 0 评论 -
Codeforces Round #358 (Div. 2) Alyona and Strings
D. Alyona and Stringstime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard output题意:给出两个字符串 s[1]s[2].......s[n], t原创 2016-06-22 19:53:42 · 327 阅读 · 0 评论 -
状压DP——彩虹小马与魔法数列
P3728彩虹小马与魔法数列时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限3000ms问题描述暮光闪闪想要快快长高,但她学习的有关身高的魔法都会一下子让她长高到100米以上,这显然是她不愿意看到的。在查阅了许多魔法典籍后,她终于发现长高的速度与一个魔法数列a有关。她知道,当魔法数列中的任意两个数最大公约数都为1时,自己的长高速度会变得更快。非常幸运原创 2016-07-27 21:01:19 · 435 阅读 · 0 评论 -
树形dp--清洁机器人 nkoj3695
P3695清洁机器人时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms问题描述NK中学有n间教室(编号1到n),通过n-1条双向道路相连,每条道路的长度可能不同。现在有k台清洁机器人位于s号教室,现在要安排它们去清洁所有教室。机器人靠燃油驱动,一台机器人清洁一个教室的耗油1升。在道路上行走时,每单位距离耗油1L。我们希望原创 2016-06-20 19:30:56 · 725 阅读 · 0 评论 -
回文树 BZOJ 2565 最长双回文串
2565: 最长双回文串Description顺序和逆序读起来完全一样的串叫做回文串。比如acbca是回文串,而abc不是(abc的顺序为“abc”,逆序为“cba”,不相同)。输入长度为n的串S,求S的最长双回文子串T,即可将T分为两部分X,Y,(|X|,|Y|≥1)且X和Y都是回文串。Input一行由小写英文字母组成的字符串S。Output原创 2016-06-08 18:39:07 · 598 阅读 · 0 评论 -
树形dp--computer
ComputerTime Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5383 Accepted Submission(s): 2697Problem DescriptionA school bought t原创 2016-06-16 18:12:50 · 531 阅读 · 0 评论 -
树形dp--树上涂色
P3691树上涂色时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms问题描述 给出一棵有n个节点(编号1到n)的树,开始时每个节点都没有颜色。现在有A和B两种颜色,给第x号节点涂上A颜色需要花费Ax块钱,给x号节点涂上B颜色需要花费Bx块钱。 如果i,j两个节点相邻,也就是i和j之间有边直接相连。若i号点已经涂成了A原创 2016-06-16 16:55:18 · 930 阅读 · 0 评论 -
记忆化搜索专题--nkoj3749斐波拉契表示法
P3749斐波拉楔表示法时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms问题描述斐波拉楔数列0,1,1,2,3,5,8,13,21,......给出一个整数K,用斐波拉楔数列各项加减来表示。例如10=5+519=21-217=13+5-11070=987原创 2016-08-28 20:14:51 · 633 阅读 · 0 评论 -
记忆化搜索专题--nkoj3748玩具取名
P3748玩具取名时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 时限1000ms问题描述某人有一套玩具,并想法给玩具命名。首先他选择WING四个字母中的任意一个字母作为玩具的基本名字。然后他会根据自己的喜好,将名字中任意一个字母用“WING”中任意两个字母代替,使得自己的名字能够扩充得很原创 2016-08-28 20:19:40 · 668 阅读 · 0 评论 -
[ZJOI2015] 地震后的幻想乡
P3255【ZJOI2015 Day1】地震后的幻想乡时间限制 : 20000 MS 空间限制 : 262144 KB问题描述 傲娇少女幽香是一个很萌很萌的妹子,而且她非常非常地有爱心,很喜欢为幻想乡的人们做一些自己力所能及的事情来帮助他们。 这不,幻想乡突然发生了地震,所有的道路都崩塌原创 2017-04-25 10:27:44 · 868 阅读 · 0 评论 -
后缀自动机+DP BZOJ 3238 差异
传送门:BZOJ 3238 差异 分析: 其实题目就是要求任意两个后缀T[i]和T[j] (i#include<cstdio>#include<iostream>#include<cstdlib>#include<cmath>#include<cstring>#define LL long longusing namespace std;const int maxn=1000000原创 2017-02-09 21:42:31 · 485 阅读 · 0 评论 -
后缀自动机+DP NOI2015 Day 2 品酒大会
很显然可以用后缀自动机来搞。 将输入的字符串翻转,构造SAM。 对每一个节点x,求出: (1)子树中 满足LCA(u,v)==x 的点对 的对数 (2)子树中 满足LCA(u,v)==x 的点对 的美味值乘积最大值。 注意最大值有可能由两个最小的负数相乘得到,所以最大、最小值都要记。 最后的答案为ans1[],ans2[],如果节点x表示的最长子串长度为Max, 那么x的答案可原创 2017-02-09 22:59:29 · 551 阅读 · 0 评论 -
单调队列——烽火传递
nkoj 2151Description烽火台又称烽燧,是重要的防御设施,一般建在险要处或交通要道上。一旦有敌情发生,白天燃烧柴草,通过浓烟表达信息:夜晚燃烧干柴,以火光传递军情。在某两座城市之间有n个烽火台,每个烽火台发出信号都有一定的代价。为了使情报准确的传递,在m个烽火台中至少要有一个发出信号。现输入n、m和每个烽火台发出的信号的代价(正整数),请计算总共最少需要花费多少代价,才能使原创 2016-04-09 14:06:56 · 1371 阅读 · 0 评论 -
dp+贪心+滚动数组优化——植物大战僵尸
问题描述 何老板喜欢玩植物大战僵尸,在游戏里有一条水平道路,道路的一端是入口,另一端是房子。僵尸会从道路的入口一端向房子一端移动。这条道路刚好穿过N块连续的空地。初始时,僵尸通过每块空地的时间是T秒。玩家可以在这N个空地中种植植物以攻击经过的僵尸,每块空地中只能种植一种植物。 共有三种不同类型的植物,分别是红草、蓝草和绿草,作用分别是攻击、减速以及下毒。每种植物只能在僵尸通过它原创 2016-06-06 20:15:13 · 1167 阅读 · 0 评论 -
树状数组优化dp——nkoj3771公共汽车
P3771公共汽车时间限制 : - MS 空间限制 : 65536 KB 评测说明 : 1000ms问题描述 Byte City 的街道形成了一个标准的棋盘网络 – 他们要么是北南走向要么就是西东走向. 北南走向的路口从 1 到 n编号, 西东走向的路从1 到 m编号. 每个路口用两个数(i, j) 表示(原创 2016-09-20 00:08:39 · 551 阅读 · 0 评论 -
UVa 1625 Color Length
题目和题解都在刘汝佳蓝皮书276页,讲的很详细,这里就不再废话了。代码:#include#include#include#define CLEAR(xxx) memset(xxx,0,sizeof(xxx))using namespace std;const int maxn=5000+5,inf=1e9;int n,m,f[maxn][maxn],fst[30][2],la原创 2016-08-09 14:37:54 · 369 阅读 · 0 评论 -
记忆化搜索专题--nkoj2087着色方案
【SCOI2008 Day2】着色方案Time Limit:25000MS Memory Limit:65536KCase Time Limit:1000MSDescription有n个木块排成一行,从左到右依次编号为1~n。你有k种颜色的油漆,其中第i 种颜色的油漆足够涂ci 个木块。所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n。相邻两个木块涂相同色显得很难看,原创 2016-08-28 19:58:04 · 491 阅读 · 0 评论 -
状压DP—— NKOJ 1502盒子与玩具
P1502【COCI 2011/2012 CONTEST #6-4】盒子与玩具时间限制 : 10000 MS 空间限制 : 65536 KB问题描述Mirko找到了N个盒子,盒子里面放了一些玩具。一共有M种不同的玩具,每种玩具可能有多个。同一种玩具可以出现在不同的盒子里。现在Mirko想选择一些盒子,使得每种玩具都至少有被选择。问Mirko有多少种选择的方法。输入格式原创 2016-07-22 16:05:06 · 443 阅读 · 0 评论 -
动归——括号匹配
nkoj 1507水水的动归题一道。。。#include#include#includeusing namespace std;const int inf=2e9;char str[305];int s[305],f[305][305];//f[i][j]表示将i到j变成合法串需要添加几个括号 int main(){ int i,n,j; scanf("%s",str+原创 2016-02-04 17:07:36 · 465 阅读 · 0 评论 -
区间动规--区分两道题--【cqoi】涂色&【cdoi】string painter
涂色Description假设你有一条长度为5的木版,初始时没有涂过任何颜色。你希望把它的5个单位长度分别涂上红、绿、蓝、绿、红色,用一个长度为5的字符串表示这个目标:RGBGR。 每次你可以把一段连续的木版涂成一个给定的颜色,后涂的颜色覆盖先涂的颜色。例如第一次把木版涂成RRRRR,第二次涂成RGGGR,第三次涂成RGBGR,达到目标。 用尽量少的涂色次数达到目标。Inp原创 2016-05-31 23:33:07 · 1100 阅读 · 0 评论 -
背包的第k优解问题
nkoj 2347DescriptionLynn 和banana要去爬山啦!他们一共有 K 个人(banana的人数可以看作很多),每个人都会背一个包。这些包的容量是相同的,都是 V。可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值。在 lynn看来,合理的背包安排方案是这样的: (1)每个人背包里装的物品的总体积恰等于包的容量。 (2)每个包里的每种物品最多只有一原创 2016-02-20 21:30:09 · 785 阅读 · 0 评论 -
多维动规——打饭 nkoj 1045 zjoi 2005
先对较简单的一个窗口的情况讨论,容易得出如下的贪心原则:吃饭慢的先打饭,所以先对数据根据吃饭的速度进行排序。预处理:排序,sum[i]表示前i个人的排队总时间。状态:f[i][j]表示前i个人在第一个窗口排队j时间内吃完饭的最短时间,第二个窗口的排队时间为sum[i]-j。代码如下:#include#include#includeusing namespace std原创 2016-01-29 09:43:54 · 502 阅读 · 0 评论 -
区间动规——凸多边形的三角划分
给定一具有N个顶点(按顺时针方向1到N编号)的凸多边形,每个顶点的权均已知。问如何把这个凸多边形划分成N-2个互不相交的三角形,使得这些三角形顶点的权的乘积之和最小? f[i][j]表示从编号i到j(顺时针)这一段连续顶点划分后的最小权重;那么求解的问题变成了f[1][n]代码如下: #include#includelong long w[55],f[55原创 2016-01-28 10:26:16 · 1631 阅读 · 1 评论 -
中位数——士兵站队 nkoj 3551
Description 在一个划分成网格的操场上,n个士兵散乱地站在网格点上。网格点用整数坐标(x,y)表示。 士兵们可以沿网格边往上、下、左、右移动一步,但在同一时刻任一网格点上只能有一名士兵。按照军官的命令,士兵们要整齐地列成一个水平队列,即排列成(x,y),(x+1,y),…,(x+n-1,y)。 如何选择x和y的值才能使士兵们以最少的总移动步数排成一行。编程计算使原创 2016-01-28 11:27:45 · 600 阅读 · 0 评论 -
动态规划——切蛋糕
nkoj 2305 改编自ZOJ3537Description有一个凸多边形蛋糕,你现在要用刀把它切成若干块三角形的小蛋糕。每一刀你只能沿着当前凸多边形的某条对角线切。我们可以把蛋糕看成是笛卡尔坐标系中的n个坐标点连接而成的图形,每次切割都会消耗一定的体力,切割第i和第j号点构成的对角线所消耗的体力为cost(i,j)=|xi+xj|*|yi+yj| mod t,t为题目给出的体力常数。原创 2016-02-14 14:13:41 · 1723 阅读 · 0 评论 -
动态规划——小胖办证
nkoj 1016Descriptionxuzhenyi要办个签证。办证处是一座M层的大楼,11. 这个签证员在1楼 2. xuzhenyi的签证已经给这个签证员的正楼下(房间号相同)的签证员盖过章了。 3. xuzhenyi的签证已经给这个签证员的相邻房间(房间号相差1,楼层相同)的签证员盖过章了。 每个签证员盖章都要收取一定费用,总费用不超过1000000000。找出费原创 2016-02-13 11:04:54 · 1520 阅读 · 0 评论 -
动态规划——DNA
nkoi 1364Description给出1个只有A、B组成的长度为N的字符串,现在给出两种变换方式:第一种是翻转一个字母,A变成B,或B变成A;第二种是翻转字符串某个字符的前缀(包括该字符),将前缀中所有的A变成B,或者所有的B变成A。 现在要把给出的字符串变成全A,问至少需要多少次变换操作。分析:要么将所有的变成A,或者把所有的变成B再加一次翻转。一道动归水题,就原创 2016-02-13 11:03:23 · 982 阅读 · 0 评论 -
动态规划——背包
背包经典问题:背包问题01: 一个背包容积为T(0 代码如下:#includeusing namespace std;int s[1005];bool f[3000];int main(){ int i,k,ans=0,v,n; scanf("%d%d",&v,&n); for(i=1;i<=n;i++)scanf("%d",&s原创 2016-01-27 16:36:48 · 661 阅读 · 0 评论 -
动态规划——破锣摇滚乐队USACO Chapter 3 Section 4
nkoj 1198Description你刚刚继承了流行的“破锣摇滚”乐队录制的尚未发表的N(1 <= N <= 20)首歌的版权。你打算从中精选一些歌曲,发行M(1 <= M <= 20)张CD。每一张CD最多可以容纳T(1 <= T <= 20)分钟的音乐,一首歌不能分装在两张CD中。 不巧你是一位古典音乐迷,不懂如何判定这些歌的艺术价值。于是你决定根据以下标准进行选择: 歌曲必须原创 2016-03-01 19:46:29 · 708 阅读 · 0 评论 -
动归——修补牛棚 USACO1.3.2
一道水水的动归,直接放代码了:#include#include#includeusing namespace std;const int inf=2e9;int s[205],f[55][205];//f[i][j]表示用i块修复前j个牛棚最短的长度 int main(){ int n,m,p,i,j,k; scanf("%d%d%d",&m,&p,&n); for(i=原创 2016-02-06 21:42:52 · 571 阅读 · 0 评论 -
UVA 1169 DP+单调队列优化 Robotruck 捡垃圾的机器人
题意:一个机器人从(0,0)开始按照序号从小到大依次拣起n个坐标点上的垃圾(重量为ci),并回到原点。但是任何时候手上垃圾都不能超过重量C。任意两点距离为曼哈顿距离。求机器人行走的最短路程。Input consists of multiple test cases. The first line of the input contains the number of test case原创 2016-04-29 22:13:03 · 683 阅读 · 0 评论 -
UVA 11825 Hackers' Crackdown dp+位运算状态压缩(子集枚举)
题意: 有N台电脑(编号为0,1,2......n-1),每台电脑有N(NInputThere will be multiple test cases in the input file. A test case begins with an integer N (1 ≤ N ≤ 16),the number of nodes in the network. The原创 2016-04-30 18:57:00 · 571 阅读 · 0 评论 -
单调队列优化dp-----nkoj3662划区灌溉
划区灌溉Time Limit:10000MS Memory Limit:65536KTotal Submit:16 Accepted:10 Case Time Limit:1000MSDescription约翰的奶牛们发现山脊上的草特别美味.为了维持草的生长,约翰打算安装若干喷灌器.为简化问题,山脊可以看成一维的数轴,长为L(1≤L≤10^6),而且L-定是一个偶数.每个喷灌原创 2016-04-13 17:41:41 · 824 阅读 · 0 评论 -
2016.4 半期 DP+单调队列优化 摘橘子
nkoj 3665Description约翰在农场上种了一排共N棵橘子树,约翰将它们编号1到N。又到了橘子成熟的季节,约翰安排他的M头奶牛去摘橘子。但每头奶牛都有自己独特的采摘习惯: 第i头奶牛最多只愿意摘连续Xi棵橘子树上的橘子,并且其中要包括它最喜欢的第Zi号橘子树(它也可以一棵树都不摘)。 第i头奶牛每摘一棵树,都会从该树上摘下恰好Yi个橘子(每棵树上的橘子都足够多)。原创 2016-04-21 16:43:56 · 421 阅读 · 0 评论 -
【NOIP2015】子串
有两个仅包含小写英文字母的字符串 AA 和 BB。现在要从字符串 AA 中取出 kk 个互不重叠的非空子串,然后把这 kk 个子串按照其在字符串 AA 中出现的顺序依次连接起来得到一个新的字符串。请问有多少种方案可以使得这个新串与字符串 BB 相等?注意:子串取出的位置不同也认为是不同的方案。输入格式第一行是三个正整数 n,m,kn,m,k,分别表示字符串 AA 的原创 2016-05-29 17:20:54 · 1705 阅读 · 1 评论 -
uva 11584 划分成回文串
P3625 划分成回文串时间限制 : 10000 MS 空间限制 : 65536 KB问题描述给一个字符串, 要求把它分割成若干个子串,使得每个子串都是回文串。问最少可以分割成多少个。 例如: “racecar”本身就是回文串,答案为1 “fastcar”,答案为7,分成的7个回文串为"f", "a", "s", "t", "c", "a", "r" “a原创 2016-05-25 19:06:03 · 1087 阅读 · 0 评论 -
动规——邮局问题 nkoj 1181
一些村庄建在一条笔直的高速公路边上,我们用一条坐标轴来描述这条公路,每个村庄的坐标都是整数,没有两个村庄的坐标相同。两个村庄的距离定义为坐标之差的绝对值。我们需要在某些村庄建立邮局。使每个村庄使用与它距离最近的邮局,建立邮局的原则是:所有村庄到各自使用的邮局的距离总和最小。 数据规模:1Input2行 第一行:n m {表示有n个村庄,建立m个邮局} 第二行:a1 a2 a原创 2016-01-28 10:43:11 · 1680 阅读 · 0 评论 -
动规——【USACO3.3.5】A Game游戏 IOI'96
Description有如下一个双人游戏:N(2 编一个执行最优策略的程序,最优策略就是使玩家在与最好的对手对弈时,能得到的在当前情况下最大的可能的总分的策略。你的程序要始终为第二位玩家执行最优策略。 状态:f[i][j]表示第i个数到第j个数先手可以获得的最大得分。决策:先手可以取第i个数,那么剩下的i+1到j个数就等价于后手的情况,反之亦然。代码如下:#includ原创 2016-01-30 14:08:08 · 1108 阅读 · 0 评论