随笔分类 -  动态规划--普通DP

摘要:n<=10000,n*2的格子玩扫雷,给下面一行的数字,问上面一行有几种方案。 ????我写的DP,貌似有更简洁的写法。。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<stdlib.h> 5 // 阅读全文
posted @ 2017-12-05 13:10 Blue233333 阅读(173) 评论(0) 推荐(0)
摘要:n<=500000的序列和m<=500000的符号串,求最长的子序列,满足选中的数中第i个数和第i+1个数满足符号关系Si。 最长xx子序列--DP+树状数组。 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #inc 阅读全文
posted @ 2017-11-28 07:07 Blue233333 阅读(155) 评论(0) 推荐(0)
摘要:n<=100000天,一开始有s块钱,每天股票A价格ai,B价格bi,每天可以做的事情:卖出股票;按A:B=RTi的比例买入股票。问最后的最大收益。股票可以为浮点数,答案保留三位。 用脚指头想想就知道是:某一天全部买进来,某一天全部卖出去,没有说买一半卖一半的。 那就可以dp了,f(i)表示前i天最 阅读全文
posted @ 2017-11-22 21:28 Blue233333 阅读(173) 评论(0) 推荐(0)
摘要:n<=100,m<=1000的图,在此图上用油箱容量C<=1e5的车来旅行,旅行时,走一条边会耗一单伟油,在点i时,若油量<ci,则可以把油以pi的价格补到ci,pi<=n*n,ci<=1e5,现T<=1e5个询问:从Ai出发,带Yi<=n*n块钱走不少于Si<=1e9的路程,问最多剩多少钱。 方法 阅读全文
posted @ 2017-11-06 09:01 Blue233333 阅读(315) 评论(0) 推荐(0)
摘要:n<=250个大写字母和m<=250个小写字母,给p<=200个合法相邻字母,求用这些合法相邻字母的规则和n+m个字母能合成多少合法串,答案mod 97654321. 什么鬼膜数。。 f(i,j,k)--i个大写字母,j个小写字母,最后一个字母是k,,其中k是小写字母,p是能接在k前面的任意字母,k 阅读全文
posted @ 2017-10-26 19:15 Blue233333 阅读(210) 评论(0) 推荐(0)
摘要:n<=1000分钟,每分钟会有一个苹果从树1或树2掉下,一开始在树1,最多换位置m<=30次,问最多能收到多少苹果。 F(i,j,0/1)--前i分钟在换位置j次,在树1/2: 1 #include<cstring> 2 #include<cstdlib> 3 #include<cstdio> 4 阅读全文
posted @ 2017-10-26 14:25 Blue233333 阅读(178) 评论(0) 推荐(0)
摘要:n<=248个数字,可以进行这样的操作:将相邻两个相同的数字合并成这个数字+1,求最大能合成多少。 f(i,j)--区间i到j能合成的最大值,f(i,j)=max(f(i,k)+1),f(i,k)=f(k+1,j)。 1 #include<stdio.h> 2 #include<string.h> 阅读全文
posted @ 2017-10-02 14:30 Blue233333 阅读(145) 评论(0) 推荐(0)
摘要:n<=1000个牛塔,每塔30头牛,m<=1000个地点会使经过的牛塔少一头,K<=30个命令每次使所有牛塔往东西南北某方走一格,求最多损失多少牛并输出字典序最小的方案。 没看到K的范围想不出系列。。由于K<=30,不会出现牛负数的情况,所以直接搜,搜可能会搜到重复,那就记忆化,那不如直接写DP。 阅读全文
posted @ 2017-09-28 19:25 Blue233333 阅读(243) 评论(0) 推荐(0)
摘要:n<=100000个点m<=100000条边有向图,有一次机会沿着某条边反方向走一次,求从一号点出发最终到达一号点的路径经过的不同的点的数量的最大值。 tarjan缩完点,如果没机会反方向的话答案就是1所在的分量的大小。现在有了,其实就是1->1能到达的某个点->反向边->能到达1的某个点,所以只要 阅读全文
posted @ 2017-09-28 08:00 Blue233333 阅读(183) 评论(0) 推荐(1)
摘要:n<=1000个球在坐标系中从天上掉下,给每个球初始位置(Xi,Yi)和下落速度Vi,我从x0开始在x轴上走,走一个单位一秒,走到一处可以0秒射击一个横坐标相同的球,得分为球的当前纵坐标,求打完所有求最大得分/1000。 这是一种当前决策影响后续代价的DP,需要在某一步决策的同时把该决策对后面的影响 阅读全文
posted @ 2017-09-27 16:23 Blue233333 阅读(216) 评论(0) 推荐(0)
摘要:数轴上n<=500个站可以买东西,每个站位置Xi,库存Fi,价格Ci,运东西价格是当前运载重量的平方乘距离,求买K<=10000个东西到达点E的最小代价。 f[i,j]--到第i站不买第i站东西的最大值,转移时决策的是买上一个站的东西,f[i,j]=f(i-1,k)+(j-k)*C(i-1)+j*j 阅读全文
posted @ 2017-09-22 14:35 Blue233333 阅读(274) 评论(0) 推荐(0)
摘要:L<=1000000的土地上用长度在2*A~2*B的线段覆盖所有点,且给定n<=1000个区间,每个区间上只允许有一条线段,求最少多少线段,无解-1。 f[i]表示填前i个土地最少线段,f(i)=f(j)+1,2*A<=i-j<=2*B,用个单调队列就行。注意区间是左闭右开。 至于那些坏区间,如果某 阅读全文
posted @ 2017-09-22 14:30 Blue233333 阅读(189) 评论(0) 推荐(0)
摘要:n<=200000个点,m<=100000个区间,每个区间有且仅有一个点,求最多几个点,无解-1。 http://www.cnblogs.com/Chorolop/p/7570191.html WA了两次:看成最少几个点;判无解是<0而不一定=-inf。 1 #include<stdio.h> 2 阅读全文
posted @ 2017-09-21 20:44 Blue233333 阅读(177) 评论(0) 推荐(0)
摘要:n<=100000 * m<=100000的网格求不经过给定的h<=2000个点,从左上角到右下角只向右或向下走的方案数。 先来看不经过一个点: 要绕过这个点到右下角,可以先到该点右上角,再下来,或者到该点左下角,再往右。更一般的,是到该点右下角的总方案,减去经过该点的方案数。 如果这个点坐标(n, 阅读全文
posted @ 2017-09-21 19:45 Blue233333 阅读(322) 评论(0) 推荐(0)
摘要:n<=100000个数,求划分为若干和不小于0的区间的方案数%1000000009。 注意模数啊啊啊。。f(i)--前i个数方案数, n2过不了。不过上面那个东西就是找满足sum(i)>=sum(j)的f,随便线段树合并或者平衡树想必都可以写啦 然而splay写炸了。。求和最后一步旋转转错了。。 1 阅读全文
posted @ 2017-09-13 07:15 Blue233333 阅读(183) 评论(0) 推荐(0)
摘要:n<=50000个点m<=150000的带边权DAG,保证1入度0,n出度0,其他点入度出度均不为0,求:从一号点开始到n,期间有可能K<=10次随机选边走,最坏情况下总边权多少。 没理解题意系列。。问了唐神T_T题目是说,这个牛已经知道会有这种情况,所以在除了K次剩下的时间里它会选最优方案走,而如 阅读全文
posted @ 2017-09-12 21:27 Blue233333 阅读(212) 评论(0) 推荐(1)
摘要:n<=400个地点第Ai秒会出礼物,给一个邻接矩阵描述地点间的路径耗时,去下一个地点只能走直接相连的路径(不一定最短路),求最多能拿多少。 有点水的DP。。f[i]表示去拿第i个(时间顺序)礼物最多能拿多少,f[i]=max(f[j]+1),其中时间允许从j走到i。 1 #include<stdio 阅读全文
posted @ 2017-09-04 13:04 Blue233333 阅读(231) 评论(0) 推荐(0)
摘要:数轴上n<=1000个点,从p出发以任意顺序走到所有的点,求到达每个点的时间之和的最小值。 好题!看起来水水的实际易错! 显然的结论是经过一个区间点之后肯定落在左端点或右端点上,谁没事最后还往中间跑呢!那就可以拍个序然后设计dp状态了,一个区间dp,f[i,j,0/1]表示走了区间i~j,最后落在左 阅读全文
posted @ 2017-09-03 23:38 Blue233333 阅读(252) 评论(0) 推荐(0)
摘要:n<=100个数字,选最少的个数使“误差”少于E并输出选该个数下最小的“误差”。误差定义: 对于任何测量结果子集,每一个非此子集中的结果都会产生误差.总误差是所有测量结果的误差之和.更明确第说, 对于每一个和所有s_j都不同的i: * 如果 i 小于 s_1, 误差是: 2 * | M_i - M_ 阅读全文
posted @ 2017-08-30 19:48 Blue233333 阅读(175) 评论(0) 推荐(0)
摘要:n<=700000个数,两人轮流取数,位置必须单增,输出两人都按最优策略得到的最大答案。 一开始看不懂“最优策略”,后来发现没有必要知道,f[i][1/0]--先/后手取数i最优答案,f[i][1]=a[i]+f[maxi][0],f[i][0]=f[maxi][1],maxi>i,因为先手取完后手 阅读全文
posted @ 2017-08-30 14:30 Blue233333 阅读(187) 评论(0) 推荐(0)