![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构优化dp
untilyouydc
月份未到你也得接受
展开
-
2018 计蒜客之道 淘宝的推荐系统(dp+枚举区间优化)
小明刚刚入职淘宝,老大给他交代了一个简单的任务,实现一个简易的商品推荐系统。这个商品推荐系统的需求如下:一共有 nn 件商品可以被推荐,他们的编号分别为 11 到 nn。每件商品都有一个价格,编号为 ii 的商品价格为 p_ipi 元。现在需要给用户推荐尽可能多的商品,但是要保证按照编号上升的顺序给用户依次推荐商品,并且,相邻商品的价格之差的绝对值不能超过 dd。注意,第一个推荐的商品价...原创 2018-08-26 13:57:43 · 360 阅读 · 0 评论 -
Removed Interval HDU - 5489(LIS+线段树加速)
思路一般的思路:先预处理得到f[i]以i结尾的最长上升子序列,g[i]以i开始的最长上升子序列。然后枚举去掉的L,从L+1项开始,那么答案应该是max(f[1]....f[i-L])+g[i]。所以问题的关键转化为求前i-L项中,小于a[i],并且f[]最大的值。对于小于a[i[这个条件,我们可以考虑使用离散化来实现(离散化后,只找它前面的项就可以保证),对于找最大值,那直接线段树或树状数组...原创 2018-09-22 00:39:15 · 193 阅读 · 0 评论 -
Cut the Sequence POJ - 3017(dp+单调队列优化)
思路:dp[i]表示前第i项的最小值。很容易写出状态转移方程:dp[i]=min(dp[j]+max(a[j+1],a[i])),j<=i;优化的思想是:我们需要快速的在前面找到一个j,同时还要找出j+1到i之间的最大项是什么,这样就能快速实现,最直接的思路是求RMQ,但是这题可以用单调队列。用单调队列维护一个递减的序列,对于当前的a[i],先将队尾小于或等于a[i]的元素删掉,...原创 2018-10-04 21:41:45 · 266 阅读 · 0 评论 -
Fxx and game HDU - 5945(单调队列优化dp)
思路:考虑反着dp,从dp[1]倒推dp[x]因为dp[i]<=dp[j] j<i ,所以考虑用单调队列来优化。除法不用考虑,考虑加法就行。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int ...原创 2018-10-03 23:32:58 · 297 阅读 · 0 评论 -
Trade HDU - 3401 (单调队列优化dp)
思路:首先把dp状态方程写出来:设dp[i][j]表示第i天有j个股票的最大值。那么转移可以有三种情况:在第i+1天什么都不干,dp[i+1][j]=dp[i][j]在买进一些股票:dp[i+1][j]=max(dp[i+1][j],dp[i+1-w-1][k]-(j-k)*ap在卖出一些股票:dp[i+1][j]=max(dp[i+1-w-1][k]+(j-k)*bp) 可以...原创 2018-10-03 22:45:43 · 229 阅读 · 0 评论 -
The Lost House POJ - 2057(树形dp+贪心 (双线最优子结构问题))
思路题意:有一只蜗牛爬上树睡着之后从树上掉下来,发现后面的”房子”却丢在了树上面, 现在这 只蜗牛要求寻找它的房子,它又得从树根开始爬起,现在要求一条路径使得其找到房子 所要爬行的期望距离最小. 爬行距离如下计算, 题目规定每一个分支和枝末都看做是 一个节点, 这些节点之间的距离都是1, 在分支上可能会有热心的毛毛虫, 这些毛毛虫 会如实的告诉蜗...原创 2018-09-12 23:27:19 · 177 阅读 · 0 评论 -
YJJ's Salesman HDU - 6447(dp+树状数组优化)
前面已经分析过,并且用线段树写过。树状数组对单点更新更快,所以.....代码:#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#incl...原创 2018-08-25 23:42:13 · 397 阅读 · 0 评论 -
YJJ's Salesman HDU - 6447 (dp+线段树优化)
YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is he at the destination, or on the way to destination. One day, he is going to travel from city A to sout...原创 2018-08-25 23:09:21 · 224 阅读 · 0 评论 -
The Bakery CodeForces - 834D (dp+多颗线段树优化)
Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought required ingredients and a wonder-oven which can bake several types of cakes, and opened the bakery.Soon the expenses...原创 2018-08-26 23:22:32 · 171 阅读 · 0 评论 -
Minimizing Maximizer UVA - 1322 (dp+线段树优化)
题意:用最少的段覆盖1-n区间思路:dp[i]表示覆盖了前i需要的最少段数,显然dp[i]=min(dp[i],dp[s]+1)(s<i)。也就是说,每次更新i,需要去前i中找到最小值,所以考虑用线段树来实现。直接根据m个输入,不断更新就行。代码:#include <iostream>#include<bits/stdc++.h>using ...原创 2018-08-26 15:57:16 · 294 阅读 · 0 评论 -
2018 计蒜客初 赛淘宝的推荐系统+TSL序列(dp+线段树优化)
描述TSL序列的定义是满足|ai−ai−1|≤d,(0<i≤|a|)的序列。现在给你一个有n个元素的序列,求出这个序列的最长TSL子序列的长度。输入有多组测试数据,(数据组数≤20)。对于每组数据,第一行有两个整数n,d如题目所述。第二行有n个数a1,a2,…,an,中间以空格分割。1≤n≤1050≤d≤1080≤ai≤108输出对于每组测试数据,输出一个整数表示该...原创 2018-08-26 14:59:13 · 196 阅读 · 0 评论 -
CRB and Apple HDU - 5406(双线LIS+多颗数组数组优化)
思路首先,考虑第1个LIS的最后一项是i,第二个LIS的最后一项是j。可以这样考虑状态转移d[i][j]=max(dp[i][k](k#include &lt;bits/stdc++.h&gt;using namespace std;typedef long long ll;const int maxn=1e3+7;const int inf=0x3f3f3f3f;int n;in...原创 2018-09-22 23:09:37 · 212 阅读 · 0 评论