随笔分类 -  动态规划

摘要:数轴上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<=400个东西,每个东西有高度<=100,这种东西在堆放过程中不得超过的最大高度<=40000,以及每个东西的个数<=10,求最高能堆多高。 算了下背包复杂度不太对然后开了bitset。。 1 #include<stdio.h> 2 #include<string.h> 3 #include<s 阅读全文
posted @ 2017-09-19 19:14 Blue233333 阅读(505) 评论(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<=50个游戏机有花费,每个游戏机有Gi<=10种游戏,每种游戏有花费有收益,买了游戏机才能玩对应游戏,求最大收益。 这就是一个背包!不过有依存关系,就不会了! 方法一:f[i][j]表示游戏机i用j块钱能得多少收益,这是可以预处理的,而g[i][j]表示前i个游戏机用j块钱最大收益, 果断tle 阅读全文
posted @ 2017-09-07 19:19 Blue233333 阅读(155) 评论(0) 推荐(0)
摘要:n<=100种硬币,给每种的硬币的面额<=120和我每种有多少个<=10000,店主的硬币跟我一样但有无限个,求买t<=10000块钱的东西钱最少转手几次。 我拿的硬币最少几次就是多重背包,店主还的最少当然是完全背包啦,那问题在于这个背包多大呀? 找回来的钱和我给的钱一定没有交集,如果有,那当初少给 阅读全文
posted @ 2017-09-06 14:26 Blue233333 阅读(235) 评论(0) 推荐(0)
摘要:n<=300000个点的树,给m<=300000条带权路径(ui,vi,保证vi是ui的祖先)求覆盖整棵树每条边的最小权和。 好题好姿势!直观的看到可以树形DP,f[i]表示把点i包括它爸爸下面那条边都覆盖的最小权,就用经过他爸爸那条边的所有路径,各条路径加上一些子树信息来更新即可。 这样时间炸,那 阅读全文
posted @ 2017-09-05 18:52 Blue233333 阅读(448) 评论(0) 推荐(0)
摘要: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)
摘要:T<=10组数据问K<=30种珠子每种n<=1e9串成1~n长度的序列共有多少种,mod1234567891。 方程没想到。矩阵不会推。很好。 f[i][j]--长度i,j种珠子方案数,f[i][j]=f[i-1][j]*j(放个旧的)+f[i-1][j-1]+(K-(j-1))(放个新的) n太大 阅读全文
posted @ 2017-08-29 12:51 Blue233333 阅读(122) 评论(0) 推荐(0)
摘要:n<=100000个杆,给高度,增加高度代价为增加量的平方,通过增加使得sigma (a[i]-a[i-1])*C,2<=i<=n的值最小。 f[i][j]--前i根杆第i根高度j的最大值,f[i][j]=min(f[i-1][k]+C*|k-j|+(j-a[i])2),过不了。 把绝对值拆掉,就有 阅读全文
posted @ 2017-08-28 16:55 Blue233333 阅读(157) 评论(0) 推荐(0)
摘要:给出n个节点m条边无向图,炸弹从1开始走,有p/q的概率爆炸,否则等概率移到别的点求在每个点爆炸概率f[i,j]-第j秒到点i的概率 W=p/q 则f[i,j]=sigma(1-W)/D[i]*f[k,j-1]其中D[i]为点i的度,k与i有连边Ans(i)=W(f[i,0]+f[i,1]+f[i, 阅读全文
posted @ 2017-08-28 12:54 Blue233333 阅读(220) 评论(0) 推荐(0)
摘要:每月m<=1000块钱,有n<=300道题,要按顺序做,每月做题要花钱,花钱要第一个月预付下个月立即再付一次,给出预付和再付求最少几个月做完题,第一个月不做。 神奇的DP。。竟没想出来。。 注意到这个月做题受制于上个月做的题,f[i][j]--最后做i~j题的最少月数,f[i][j]=inf(i~j 阅读全文
posted @ 2017-08-27 20:26 Blue233333 阅读(195) 评论(0) 推荐(0)
摘要:n<=100个点的根为1的二叉树,树边上有苹果,求保留Q<=n条边的最多苹果数。 树形DP,f[i][j]--节点i为根的子树保留j条边最优方案,f[i][0]=0,f[i][j]=max(f[lc[i]][k-1]+f[rc[i]][j-k-1]+v[lc[i]]+v[rc[i]]),这是左右都选 阅读全文
posted @ 2017-08-13 21:00 Blue233333 阅读(239) 评论(0) 推荐(0)
摘要:给出平面上n<=100个点,求最少用多少面积≤S<=200000的矩形能全覆盖。 第一想法是区间DP,f[i,j]表示覆盖第i到j的点最少矩形数,$f[i,j]=∑f[i,x]+f[x+1,j],x∈[i,j)$,但好在样例良心,这样的方案过不了样例。怎么把两个矩形相交的方案处理出来呢? f[i,j 阅读全文
posted @ 2017-08-08 06:56 Blue233333 阅读(439) 评论(0) 推荐(0)