DP
LIN452
(*╹▽╹*)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
USACO2011Open Gold Bookshelf 题解
可以把题目理解为在n本书中”切几刀”. 当n2)可以解决: dp[i]表示在前i本书,第i本书为当前书架的最后一本书的最小高度.dp[i]=min{dp[j]+mx[j+1,i]}且sum[j+1,i] 当n通过dp[i]=min{dp[j]+mx[j+1,i]},当mx[j+1,i]为h[i]时,j越小越优.假设在i前面,第一本比i高的书下标为x,如原创 2016-06-28 17:48:19 · 948 阅读 · 0 评论 -
BZOJ2794/POI2012 Cloakroom
Task 有n件物品,每件物品有三个属性a[i], b[i], c[i] .(a[i]<b[i]) 再给出q个询问,每个询问由非负整数m, k, s组成,问是否能够选出某些物品使得: 1. 对于每个选的物品i,满足a[i]<=m且b[i]>m+s。 2. 所有选出物品的c[i]的和正好是k。 n<=1,000, q<=1,000,000. c[i]<=1,000, 1<=a[i]<b[i原创 2016-10-08 22:41:47 · 637 阅读 · 0 评论 -
HDU5808(Bestcoder Round86)Price List Strike Back
题目戳这假如我们已知第i天可以购买的所有商品,那么剩下就是01背包的问题了.能够购买的所有商品由两个条件决定:编号下标和距离.我们可以减少一个维度使问题更简单.假如把询问和点一起按照距离d排序,那么就能保证询问到i时,所有考虑到的点x一定满足dis[x]<=didis[x]<=di这一条件.现在问题就转化成了:询问:在[Li,Ri][Li,Ri]区间中能否找到一些点满足其价值之和=sumisumi.原创 2016-10-09 18:49:22 · 871 阅读 · 0 评论 -
BZOJ2796/POI2012 Fibonacci Representation
Task Fib数列0,1,1,2,3,5,8,13,21。 给出一个数字,用FIB数列各项加加减减来得到。例如 10=5+5 19=21-2 求出通过加减得到K的最少项数. 1<=K<=10^17.Solution 有一个贪心的思路,每次找到离K最近的两项f(i),f(i+1),再把问题转化为求K-f(i),f(i+1)-K即可.用计划搜索优化.我是将10^7以内的数原创 2016-10-09 20:22:17 · 542 阅读 · 0 评论 -
BZOJ1531/POI2005 Bank notes
裸的多重背包,利用二进制进行优化: 假设有12枚面额为3的硬币,可以把它转化为 面值为3,6,12,15的硬币分别1枚.这样就把物品总数减少到log件.#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int M=205;const int S=15;const原创 2016-10-27 07:10:45 · 764 阅读 · 0 评论 -
BZOJ1537/POI2005 The Bus
假设dp[i][j]表示在(i,j)位置能够接到的最多乘客数量,我们会发现很多的状态是无效的,因此只要记录到达站点的状态.由于只能向北或向东走,只可能通过西南的站点到达(i,j),也就是所有满足a<=i&&b<=j的站点(a,b).这样就有两维状态,可以通过排序+区间求值的方法降维. 我们可以按照横坐标从小到大排序,维护纵坐标的区间最值,由于每次求的是前缀最值并且不断增大,可以用树状数组求解.#i原创 2016-10-27 07:18:18 · 582 阅读 · 0 评论 -
IOI2011 race
Task: 给定一棵带权树,求出边数最小的一条路径使得路径长度为K. 1 ≤ N ≤ 200000 ,1 ≤ K ≤ 1000000Solution: 枚举路径的lca为节点x,只考虑一定经过x的路径. 再枚举其中的一个端点y,设y到x的距离为d1,确定了y,我们就知道了路径另一个端点到x的距离了,现在问题就是求出到x点距离为K-d1的路径的最少边数,那么只要在遍历x子树过程原创 2016-10-08 14:13:13 · 572 阅读 · 0 评论
分享