动态规划
波波i
此微博用来学习,和嘿嘿嘿。
展开
-
【NOIP2014模拟9.7】我要的幸福 (Standard IO)
题意:给你个n*m的矩阵,他们有权值,0不能走,而且只能向下向右走。求出一条路径的字典序最小。走不到输出Oh,the life is too difficult!思路:先把所有的不可以走的路求出来,然后找他们可以走的路,全部入队,然后只保留最小的,如果有同个就全部保留,然后用这些数接着走,直到有n*m-1个队列就好了。程序:const maxn=1000; var a,f:array [0..m原创 2017-01-13 21:40:37 · 378 阅读 · 0 评论 -
【POI2012】polarization(树的重心,dp优化,结论)
题目大意: 给你一颗树,对于每条边你可以自己选择方向,但是只能一个方向,如果点i,j可以互相到达,那么i,j就是匹配的。求出匹配数最小和最大的值。 思路: 这题的匹配最小值很容易求,手玩几个图就可以发现为n-1,证明就是所有深度为偶数的向下走,为奇数的向上走,每条边就只会匹配一个点就不会延伸了。 对于最大的匹配数就特别恶心了,而且这题还有没部分分,哎。首先我们要猜一个结论,结论就是最大原创 2018-01-30 19:43:39 · 207 阅读 · 0 评论 -
【CQOI2014】通配符匹配
题目大意: 思路: dp加上hash优化,先设f[i][j]为做到i个匹配到了j。然后根据星号把一段字符串拆分成很多段,然后转化为hash值,和原串匹配。 程序: #include #include #include #include #include #define F(i,j,n) for(int i=j;i #define D(i,j,n) for原创 2018-01-06 15:19:11 · 292 阅读 · 0 评论 -
城市交通
题目大意:编号为1~n的n个城市,每个城市有两个权值Ai和Bi。 对于两个城市i和j,i可到j当且仅当j>i,而费用为(j-i)*Ai+Bj。 求从城市1到城市n的最小费用。n=100000思路:dp方程显而易见f[i]:=min(f[j]+(j-i)*ai+bj),因为n=100000直接做是不可以的,那么现在就要用斜率优化优化,把式子化简。 f[j]+j*a[i]+b[j]+i*a[i原创 2017-08-08 20:26:37 · 444 阅读 · 1 评论 -
清兵线(准备特长生)
题目:思路:这题我觉得有必要多讲讲,题目是给了我们三个阶段的分数,前四十分还是很好拿的,搜索加点优化就好了,后面就要用到动态了。 因为他说的事向左或向右杀,所以我可以认为他为了更加优化的答案就尽量的不要绕远路,就是一路向西杀到底,或者杀到一半在回来杀右边的。很幸运,我水到了60分,哈哈哈。 讲一下正解吧,首先我们要知道,如果你在路上遇到的兵就一定要杀了,所以我们可以设F[i,j],为从i到j杀的原创 2017-05-17 19:53:44 · 358 阅读 · 0 评论 -
买装备(特长生准备)
题目大意:n个物品,物品有物抗和魔抗还有价值,要求物抗和魔抗都到达规定值,然后价值最小。 n<21 物抗<21 魔抗<79 价值<800;思路:二维费用背包,书上的例题搜索,对一个物品只有选和不选两种状态,时间就是o (2^21);程序:`var i,j,n,m,x,y,k,min:longint; a,b,w:array [1..1000] of longint原创 2017-05-17 17:25:10 · 254 阅读 · 0 评论 -
2016东莞市特长生考试 字串距离
题意:给定两个字符串S<2000。 定义对应字符串距离为ASCII的差的绝对值,可以插入空格,空格和字符之间距离为k,空格和空格之间的距离为0.空格随便插,求出字符串的最小距离 k为题目给的思路:和最长不下降子序列很像,设f[i,j],为第一个字符串到i,第二个字符串到j的最小距离,就可以推出 如果s1插入空格f[i,j]:=f[i-1,j]+k 如果s2插入空格f[i,j]:=f[i,j-原创 2017-04-21 19:46:01 · 314 阅读 · 0 评论 -
2015年普级组模拟试题 序列
题意:给一个a序列。当后面一个是前面一个的倍数的时候,就成为一个好序列,求出所有的好序列有多少答案mod 1000000007思路:很简单的dp f[i,j*k]:=f[i,j*k]+f[i-1,j]; 表示前i个,当那一位数字为j*k的时候的最大好序列数程序: const maxn=2000; p=1000000007; var f:array原创 2017-03-23 18:06:36 · 282 阅读 · 0 评论 -
打砖块
题意:在刚开始的时候,有n行*m列的砖块,小红有k发子弹。小红每次可以用一发子弹,打碎某一列当前处于这一列最下面的那块砖,并且得到相应的得分。 如图所示: 某些砖块在打碎以后,还可能将得到一发子弹的奖励。最后当所有的砖块都打碎了,或者小红没有子弹了,游戏结束。思路:一开始先把每一列求一个用j发子弹打出的最大值,然后一列一列的扫过去, 设f[i,j]为钱i列用了j发子弹的最大值,可以得出方程原创 2017-01-19 21:25:42 · 1227 阅读 · 0 评论 -
Mooo Moo(dp)
题意:FJ 已经完全忘记了他有多少头奶牛!但是,跑到他的草场里数奶牛是一件很尴尬的事情,因为他不想让奶牛们知道他记忆有问题。作为替代,他决定秘密地把麦克风种在奶牛们通常聚集的草场里,然后只要从他听到的哞哞声音量中确定奶牛的数目即可。 FJ 的N 块草场(1 <= N <= 100)沿着一条笔直的路排成了一排。每块草场里可能有若干种不同的奶牛;FJ 的奶牛总共有B 种不同的种类(1 <= B <=原创 2017-01-14 15:51:18 · 644 阅读 · 0 评论 -
OIBH杯第三次模拟赛(普及组)Problem 3 : maxsum 最大约数和
题意:给一个s,用和不超过s 的数使得他们的因数和最大,不包括本身。思路:水dp f[i]:=f[k]+f[n-k];程序:const maxn=1000; var f:array [0..maxn] of longint; i,j,n,m,x,k:longint;function max(x,y:longint):longint; begin if x>y then exit(x)原创 2017-01-13 21:50:37 · 428 阅读 · 0 评论 -
P1070 道路游戏()
题目大意: 小新正在玩一个简单的电脑游戏。 游戏中有一条环形马路,马路上有 n n个机器人工厂,两个相邻机器人工厂之间由一小段马路连接。小新以某个机器人工厂为起点,按顺时针顺序依次将这 n n个机器人工厂编号为1-n1−n,因为马路是环形的,所以第 nn 个机器人工厂和第 1 1个机器人工厂是由一段马路连接在一起的。小新将连接机器人工厂的这 n 段马路也编号为 1-n1−n,并规定第 i i段马路...原创 2018-10-08 20:42:25 · 388 阅读 · 0 评论