DP小结 - 1
零.数轴
[TYVJ1097]MM不哭
在一个数轴上,有n个MM(绝非恐龙!)在哭泣(5555~一直哭).
tcboy也在这个数轴上,由于每个MM哭都会让tcboy损失一定的rp,于是tcboy有必要去安慰她们.(真命苦啊 T.T)
开始时,tcboy站在k号MM的旁边.
现在知道第i个MM哭泣每秒钟会使tcboy降低 w[i]的rp (单位rp/s).而tcboy的行走速度很慢只有1m/s .
tcboy安慰MM的方式很特别(怎么安慰随便大家YY了..#@$%^%$#@),不需要花费时间.
请计算tcboy安慰完所有MM,会消耗掉的rp的最小值.
[TYVJ1098]任务安排
N个任务排成一个序列在一台机器上等待完成(顺序不得改变),这N个任务被分成若干批,每批包含相邻的若干任务。
从时刻0开始,这些任务被分批加工,第i个任务单独完成所需的时间是Ti。
在每批任务开始前,机器需要启动时间S,而完成这批任务所需的时间是各个任务需要时间的总和(同一批任务将在同一时刻完成)。
每个任务的费用是它的完成时刻乘以一个费用系数Fi。请确定一个分组方案,使得总费用最小。
[POJ1991]Turning In HomeWork
奶牛在长L的数轴上交作业,共有N份作业需要交,而作业 i 需要在时刻 Ti 以后到 Pi 去交作业
奶牛一单位时间只走一单位路程,求奶牛交完所有作业并前往某个指定点Exit的最小时间
壹.装箱
[TYVJ1013]找啊找啊找GF
sqybi现在看中了n个MM,我们不妨把她们编号1到n.
请MM吃饭是要花钱的,我们假设请i号MM吃饭要花rmb[i]块大洋.
而希望骗MM当自己GF是要费人品的,我们假设请第i号MM吃饭该MM要耗费rp[i]的人品.
而对于每一个MM来说,sqybi都有一个对应的搞定她的时间,对于第i个MM来说叫做time[i].
sqybi希望搞到尽量多的MM当自己的GF,这点是毋庸置疑的.
但他不希望为此花费太多的时间,所以他希望在保证搞到MM数量最多的情况下花费的总时间最少.
有两只叫 格尔曼=Girlman=狗儿们 的狗。它们的叫声很特别,但是它们十分吝啬它们的叫声。
你为了听到它们的叫声,决定买狗饼干送给它们吃,不同种类的饼干能让它们叫的次数不一样,同一块饼干对于大小格尔曼的效果也不一样。
它们很贪婪,如果你只给其中一只格尔曼吃狗饼干或者给两只格尔曼吃的不一样,有一只就会不高兴,
因此你买狗饼干的时候总要两块两块地买,而且现在每类饼干也只有2块。
现在不是流行节约型社会吗?因此你也不能浪费,你要求的是在满足你要听格尔曼叫声次数要求的情况
(两只格尔曼实际叫的次数都不小于你的要求即可)下的最小花费是多少。
现有两个煤矿,每个煤矿都雇用一组矿工。采煤工作很辛苦,所以矿工们需要良好饮食。
每当一辆食品车到达煤矿时,矿工们便会产出一定数量的煤。有三种类型的食品车:肉车,鱼车和面包车。
矿工们喜欢变化的食谱。如果提供的食品能够不断变化,他们的产煤量将会增加。
每当一个新的食品车到达煤矿时,矿工们就会比较这种新的食品和前两次的食品,并且:
如果这几次食品车都是同一类型的食品,则矿工们产出一个单位的煤。
如果这几次食品车中有两种不同类型的食品,则矿工们产出两个单位的煤。
如果这几次食品车中有三种不同类型的食品,则矿工们产出三个单位的煤。
预先已知N<=10W个食品车的类型及其被配送的顺序。食品车不能被拆分,每个食品车必须被全部送到一个或另一个煤矿。
两个煤矿也并不要求接收相同数量的食品车,计算两个煤矿的产煤量的最大总和。
选取和不超过S的若干个不同的正整数,使得所有数的约数(不含它本身)之和最大。
[TYVJ1089]Smrtfun
现有N个物品,第i个物品有两个属性A_i和B_i。
在其中选取若干个物品,使得sum{A_i + B_i}最大,同时sum{A_i},sum{B_i}均非负。
贰.矩形
[Vijos1055] 奶牛浴场
NxM的矩阵中有K个空,选出不包含空的最大的矩形,。
永恒の灵魂最近得到了面积为n*m的一大块土地,他想在这块土地上建造一所房子,这个房子必须是正方形的。
但是,这块土地并非十全十美,上面有很多不平坦的地方。这些瑕疵十分恶心,以至于根本不能在上面盖一砖一瓦。
他希望找到一块最大的正方形无瑕疵土地来盖房子。
一个被分为n*m个格子的月饼盒,第i行第j列位置的格子里面有 a[i ,j]个月饼。
本来CCC老师打算送这盒月饼给某人的,但是就在要送出月饼盒的前一天晚上,
一只极其可恶的老鼠夜袭月饼盒,有部分格子被洗劫并且穿了洞。
CCC老师必须尽快从这个月饼盒里面切割出一个矩形月饼盒,新的月饼盒不能有洞,
并且CCC老师希望保留在新月饼盒内的月饼的总数尽量多。请计算一下新月饼盒最多能够保留多少月饼。
DD 和好朋友们要去爬山啦!他们一共有K个人,每个人都会背一个包。这些包的容量是相同的,都是 V。
可以装进背包里的一共有 N 种物品,每种物品都有给定的体积和价值。
合理的背包安排方案是这样的:
每个人背包里装的物品的总体积恰等于包的容量。
每个包里的每种物品最多只有一件,但两个不同的包中可以存在相同的物品。
任意两个人,他们包里的物品清单不能完全相同。
在满足以上要求的前提下,所有包里的所有物品的总价值最大是多少呢?
叁.树形
练手题TYVJ1051选课 TYVJ1052没有上司的舞会
[TYVJ1073]加分二叉树
设一个n个节点的二叉树tree的中序遍历为 l,2,3,…,n,其中数字1,2,3,…,n为节点编号。
每个节点都有一个分数,记第i个节点的分数为di,tree及它的每个子树都有一个加分,
任一棵子树subtree(也包含tree本身)的加分计算方法如下:
subtree的左子树的加分× subtree的右子树的加分+subtree的根的分数
若某个子树为空,规定其加分为1,叶子的加分就是叶节点本身的分数。不考虑它的空子树。
肆.状态压缩与单调队列
[TYVJ1123]-NOIP2009普及组 道路游戏
游戏中,给出一条环形马路,马路上有n个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。
以某个机器人工厂为起点,按顺时针顺序依次将这n个机器人工厂编号为1~n,
因为马路是环形的,所以第n 个机器人工厂和第1 个机器人工厂是由一段马路连接在一起的。
现并规定第i 段马路连接第i个机器人工厂和第i+1个机器人工厂(1 ≤ i ≤ n-1)
而第n段马路连接第n个机器人工厂和第1个机器人工厂。
游戏过程中,每个单位时间内,每段马路上都会出现一些金币,不同单位时间内同一段马路上出现的金币数量可能是不同的。
小新需要机器人的帮助才能收集到马路上的金币。所需的机器人必须在机器人工厂用一些金币来购买,
机器人一旦被购买,便会沿着环形马路按顺时针方向一直行走,在每个单位时间内行走一次,
即从当前所在的机器人工厂到达相邻的下一个机器人工厂,并将经过的马路上的所有金币收集给小新
游戏中,环形马路上不能同时存在2个或者2个以上的机器人,并且每个机器人最多能够在环形马路上行走p次。
小新购买机器人的同时,需要给这个机器人设定行走次数,行走次数可以为1~p 之间的任意整数。
当马路上的机器人行走完规定的次数之后会自动消失,
小新必须立刻在任意一个机器人工厂中购买一个新的机器人,并给新的机器人设定新的行走次数。
以下是游戏的一些补充说明:
1. 游戏从小新第一次购买机器人开始计时。
2. 购买机器人和设定机器人的行走次数是瞬间完成的,不需要花费时间。
3. 购买机器人和机器人行走是两个独立的过程,机器人行走时不能购买机器人,
购买完机器人并且设定机器人行走次数之后机器人才能行走。
4. 在同一个机器人工厂购买机器人的花费是相同的,但是在不同机器人工厂购买机器人的花费不一定相同。
5. 购买机器人花费的金币,在游戏结束时再从小新收集的金币中扣除,
所以在游戏过程中小新不用担心因金币不足,无法购买机器人而导致游戏无法进行。
也因为如此,游戏结束后,收集的金币数量可能为负。
现在已知每段马路上每个单位时间内出现的金币数量和在每个机器人工厂购买机器人需要的花费,计算最大盈利
伍.一点不太好分类的玩意
[TYVJ1106]登山-晴天小猪之Hill
题目大意:基本的N≤100求最小值的数字三角形模型 +扩展条件:这里的一层为环状,每一点可以向左、右、左上、右上走。
题解:在更新到某层时,从这一层中选出一个最小值向左右更新。
[TYVJ1048]田忌赛马
话说齐王和田忌又要赛马了,他们各派出 N ≤ 1000 匹马,
每场比赛,输的一方将要给赢的一方200两黄金,如果是平局的话,双方都不必拿出钱。
现在每匹马的速度值是固定而且已知的,而齐王出马也不管田忌的出马顺序。
请问田忌该如何安排自己的马去对抗齐王的马,才能赢取最多的钱?
[TYVJ1061]MobileService
一个公司有三个移动服务员。如果某个地方有一个请求,而那里又没其他人时,某个员工必须赶到那个地方去.
某一时刻只有一个员工能移动。被请求后,他才能移动,不允许在同样的位置出现两个员工。
从p到q移动一个员工,需要花费c(p,q)。这个函数没有必要对称,但是c(p,p)=0。
让公司必须满足所有的请求。目标是最小化公司花费。
[TYVJ1059]过河
在河上有一座独木桥,一只青蛙想沿着独木桥从河的一侧跳到另一侧。
在桥上有一些石子,青蛙很讨厌踩在这些石子上。由于桥的长度和青蛙一次跳过的距离都是正整数,
我们可以把独木桥上青蛙可能到达的点看成数轴上的一串整点:0,1,……,L(其中L是桥的长度)。
坐标为0的点表示桥的起点,坐标为L的点表示桥的终点。青蛙从桥的起点开始,不停的向终点方向跳跃。
一次跳跃的距离是S到T之间的任意正整数(包括S,T)。当青蛙跳到或跳过坐标为L的点时,就算青蛙已经跳出了独木桥。
题目给出独木桥的长度L,青蛙跳跃的距离范围S,T,桥上石子的位置。你的任务是确定青蛙要想过河,最少需要踩到的石子数。
Vijos 佳佳的魔杖
佳佳搞到一种树枝,无限根。
这些树枝在属性上完全相同。每一根树枝都有n段(用1~n编号),给定了每段的长度L[i]和每段的魔力值M[i]。
单独的一段是不可以从中间切开的,你可以做的就是选择一段或连续的几段,把它们作为一个整体切下来,再用来制作魔杖。
但是一根魔杖的长度不能太长——不能大于给定的值high;也不能太短——不能小于给定的值low。
魔杖有一个奇怪的要求:如果某两根魔杖的原位置有包含关系,就会产生冲突。
例如一根从1截取到5,一根从3截取到5,二者就会产生冲突。
我们假设佳佳可以得到任意多这样的树枝。佳佳需要制作出若干个互不冲突的魔杖,使所有魔杖的魔力值之和最大。
[TYVJ1064]新三国争霸
在PP研发的《新三国争霸》这款游戏中,加入灾害对道路的影响和道路的占领权
灾害对道路的影响:一旦道路W[i,j]受到了灾害的影响,那么在一定时间内,这条路将不能通过
道路的占领权:对于一条道路W[i,j],至少需要K[i,j]个士兵才能守住。
PP可真是高手,不一会,就攻下了N-1座城市,加上原来的就有N座城市了,
但他忽略了一点……那就是防守同样重要,不过现在还来的及。
因为才打完仗所以很多城市都需要建设,PP估算了一下,大概需要T天。
他现在无暇分身进攻了,只好在这T天内好好的搞建设了。
所以他秒要派士兵占领一些道路,以确保任何两个城市之间都有路。
士兵可不是白干活的,每个士兵每天都要吃掉V的军粮。因为有灾害,所以方案可能有变化。
而方案每改变一次就需要K的军粮,初始方案也需要K的军粮。
因为游戏是PP编的,所以他知道什么时候有灾害。PP可是一个很节约的人,他希望这T天在道路的防守上花最少的军粮。
N<=300,M<=5000 ,T<=50;
[TYVJ1071]LCIS
给出两个长N<=3000的字串,求其最长公共上升子序列的长度
[VIJOS]
道路上,不同的字母表示不同颜色的星星,程文可以一次性全部打掉连成一片(水平或竖直相邻)的相同颜色的星星
问从右上角到左下角最少需要打多少次?