
ACM/ICPC单调队列
just_sort
Acdream.
展开
-
POJ 2823
【题意】给定一个大小已知的数组以及一个大小已知的滑动窗口,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值。 【分析】第一分单调队列优化的入门题,思路很简单,这里就是维护一个长度最长为k的递增和递减的单调队列! 【AC代码】 // cpp~ //queue dp #include #include using namespace std; const int maxn =原创 2016-04-20 19:24:08 · 798 阅读 · 0 评论 -
HDU 3706 Second My Problem First 单调队列简单题
【题目链接】点击打开链接 【题意】非常简单,题目很短,自己读一下就好。 【解题思路】 单调队列的应用,维护一个递减的长度为A的单调队列了可以了。但是这题用数组的话,会MLE,反正我是被卡MLE了。所以改用STL的deque实现,可以解决本题。 【AC代码】 // //Created by just_sort 2016/1/7 //Copyright (c) 2016 just_原创 2017-01-07 11:34:20 · 699 阅读 · 2 评论 -
HDU 2191 二进制优化 和 单调队列优化
【题目链接】 点击打开链接 【题意】中文题目 【解法1】 暴力。拆成01背包即可。复杂度 O(n*m*m) int weight[110],value[110],cnt[110]; int dp[110]; int main() { int C; scanf("%d",&C); while(C--) { int m,n;原创 2017-01-08 13:23:43 · 890 阅读 · 0 评论 -
HDU 3401 Trade 单调队列优化DP
【题目链接】 点击打开链接 【题意】 大概就是说一个人现在炒股,他有两种操作,一种是买股票(这个当然是花钱), 一个是卖股票(这里钦定为挣钱)。然后每个人在每天买和卖股票的数量是有限制的,并且还有一个限制是一个人拥有的股票数不能超过MaxP。还有一个人执行操作的间隔必须大于W。问这个人最后最多挣多少钱? 【解题方法】 我们可以大胆的写出一个朴素的DP方程:原创 2017-01-08 10:47:28 · 745 阅读 · 0 评论 -
UESTC - 594 我要长高 单调队列优化DP
【题目链接】点击打开链接原创 2017-01-08 09:37:26 · 702 阅读 · 0 评论 -
CodeForces - 91B 单调队列 或 线段树
【题意】给一个序列,从右边开始看,对于第i个数字a[i],在右边找到一个比它小(严格小)的,最靠右的位置,k,输出k-i-1,如果一个都找不到,输出-1。对于序列的每个元素都要输出。 【解题方法1】 线段树。节点保存最小值,每次把节点更新为INF,然后查找整个区间最右边比它小的数的位置。 【代码1】 int n, a[maxn]; struct node{ int l, r,原创 2017-01-07 14:33:50 · 973 阅读 · 0 评论 -
POJ 2823 Sliding Window 单调队列优化 滑动窗口
【题意】 n个数,现在有一个大小为w的划窗,窗口每个时刻向后移动一位,求出每个时刻窗口中数字的最大值和最小值。 【解题方法】 求最大值:建立一个单调递减队列,元素从左到右依次入队,入队之前必须从队列尾部开始删除那些比当前入队元素小或者相等的元素,直到遇到一个比当前入队元素大的元素,或者队列为空为止。若此时队列的大小超过窗口值,则从队头删除元素,直到队列大小小入窗口值为止。然后把当前元素插原创 2017-01-06 20:22:34 · 845 阅读 · 0 评论 -
HDU 5903 Square Distance (贪心+dp)
Square Distance Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 192 Accepted Submission(s): 61 Problem Description A string is calle原创 2016-09-26 10:16:06 · 811 阅读 · 0 评论 -
B: Snowdrop修长廊
Snowdrop修长廊 描述 Snowdrop现在是世界著名的工程师。因为重庆的天气太热了, Snowdrop决定修一条长廊,并且长廊要覆盖必须覆盖的n个点。为 了简化整个问题,我们把一条路抽象成一维的,原点在0,有n个必须 覆盖的点,每个必须覆盖的点的坐标为,覆盖点的代价可以设成 (),其中,为固有花费。现在, 他想知道覆盖所有必须的点所需要的最小花费是多少。 输原创 2016-05-18 20:55:58 · 664 阅读 · 0 评论 -
HDOJ 3507 斜率优化入门经典题
【PS】参考博客:点击打开链接这篇博客真是写得太赞了。 【题意】大概题意就是要输出N个数字a[N],输出的时候可以连续连续的输出,每连续输出一串,它的费用是 “这串数字和的平方加上一个常数M”。 我们设dp[i]表示输出到i的时候最少的花费,sum[i]表示从a[1]到a[i]的数字和。于是方程就是: dp[i]=dp[j]+M+(sum[i]-sum[j])^2; 很显然这个是一个二维的原创 2016-05-07 20:35:37 · 681 阅读 · 0 评论 -
HDOJ 3401 Trade (单调队列优化)
【题意】告诉你 T 天里,物品的买卖价格,和最多买卖数量,还有 T 天里能买入最多的物品数量,每一次买卖间隔时间必须大于 w+1! 【分析】 1. dp[i][j] 表示前 i 天手里有 j 支股票时所获得的最大收益,因为要间隔 w+1 天才能进行一次买卖,所以前 w+1 天只能进行一个操作,那就是买操作。 2. 关于赋初值问题,合法的状态也有可能为负值的,而且结果要取最大值,所以非法状原创 2016-04-21 21:08:55 · 610 阅读 · 0 评论 -
HDOJ 3415 Max Sum of Max-K-sub-sequence
【题意】给定一个环形数组,求数组中连续长度不超过 K 的最大子段和。 【分析】 1. 题目中给定的是环形数组,其实可以在数组尾部复制一份原数据,于是把问题规模扩大到了 2 * N,但是方便了解题。 2. 对数据在加以转换:sum[i] 表示 1~i 数组元素的和,由于题目中给定了数据范围,保证了 int 不会溢出。 3. 单调队列里面的数据表示 x~x+k 范围内 sum[] 的最原创 2016-04-21 18:28:53 · 682 阅读 · 0 评论 -
POJ 1821 Fence(单调队列优化)
【题意】K个人对N块木板涂色,每个人初始站在一块木板前(不重复),每人最多只能涂包含所站木板的连续l个木板或一个木板也不涂。给出每人最多涂的木块数l,涂一快木板的工钱p,站的木板s。求这群人最多共获得多少工钱。 【分析】dp[i][j]表示前i个人对前j块木板操作的最大收益。 核心状态转移方程:dp[i][j]=max(dp[i][j-1],dp[i-1][k]+P[i].p*(j-k原创 2016-05-05 18:58:17 · 719 阅读 · 0 评论 -
BZOJ 1047: [HAOI2007]理想的正方形
题意:这里写链接内容题意: Description 有一个a*b的整数组成的矩阵,现请你从中找出一个n*n的正方形区域,使得该区域所有数中的最大值和最小值 的差最小。 Input 第一行为3个整数,分别表示a,b,n的值第二行至第a+1行每行为b个非负整数,表示矩阵中相应位置上的数。每 行相邻两数之间用一空格分隔。 100%的数据2<=a,b<=1000,n<=a,n<=b,n<=10原创 2017-01-16 19:57:40 · 493 阅读 · 0 评论