[POJ1821]Fence(单调队列优化dp)】的更多相关文章

Poj   Acwing Description 有N块木板等待被M个工匠粉刷,每块木板至多被刷一次.第i个工匠要么不粉刷,要么粉刷包含木块Si的,长度不超过Li的连续的一段木板,每粉刷一块可以得到Pi的报酬.求如何安排能使工匠们获得的总报酬最多. 1<=N<=16000,1<=M<=100 Sol 先把所有工匠按照Si从小到大排序,使我们能够按顺序进行线性Dp. 设$F[i][j]$表示前i个工匠粉刷前j块木板的最大报酬(包含空着不刷的木板).转移分为三种情况: 1.第i个工匠啥…
地址 一排N个木板,M个工匠站在不同位置$S_i$,每个人可以粉刷覆盖他位置的.最长长度为$L_i$木板段,每刷一个有$P_i$报酬.同一木板只刷一次.求最大报酬. 根据每个人的位置dp,设$f[i][j]$为第$i$个人刷前$j$个木板的最大报酬.$j<s[i]$表示不刷. 那就有 $f[i][j]=max\{f[i-1][k]+(j-k)*p[i]\}   $       $   (s[i]≤j<s[i]+L[i] , s[i]-L[i]≤k<j)$ 然后对于每行,相当于j从前面$l…
题解 以前做过很多单调队列优化DP的题. 这个题有一点不同是对于有的状态可以转移,有的状态不能转移. 然后一堆边界和注意点.导致写起来就很难受. 然后状态也比较难定义. dp[i][j]代表前i个人涂完前j个位置的最大收益. 然后转移考虑 第i个人可以不刷.dp[i][j]=dp[i-1][j]; 第j个木板可以不刷dp[i][j]=dp[i][j-1]; 然后当c[i].s<=j<=s[i]+l[i]-1时 dp[i][j]=p[i]*j+max(dp[i-1][k]-p[i]*k)其中j-…
/* poj 1821 n*n*m 暴力*/ #include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #define maxn 110 #define maxm 16010 using namespace std; int n,m,f[maxn][maxm],ans; struct node{ int l,s,p; bool operator < (const…
前言 感觉可以用单调队列优化dp的模型还是挺活的,开个随笔记录一些遇到的比较有代表性的模型,断续更新.主要做一个收集整理总结工作. 记录 0x01 POJ - 1821 Fence,比较适合入门的题,写出转移方程后可以比较容易的看出决策变量的取值范围的界是单调变化的,以及价值拆开之后也是单调的 #include<iostream> #include<cstdio> #include<algorithm> #define dd(x) cout<<#x<&…
单调队列优化DP:http://www.cnblogs.com/ka200812/archive/2012/07/11/2585950.html 单调队列优化多重背包:http://blog.csdn.net/flyinghearts/article/details/5898183 传送门:hdu 3401 Trade /************************************************************** Problem:hdu 3401 Trade Us…
单调队列优化DP的模板题 不难列出DP方程: 对于买入的情况 由于dp[i][j]=max{dp[i-w-1][k]+k*Ap[i]-j*Ap[i]} AP[i]*j是固定的,在队列中维护dp[i-w-1][k]+k*Ap[i]的单调性即可 #include<stdio.h> #include<string.h> #include<algorithm> using namespace std; ; ]; int main(){ scanf("%d%d%d&qu…
第一个单调队列优化dp 写了半天,最后初始化搞错了还一直wa.. 题目大意: 炒股,总共 t 天,每天可以买入na[i]股,卖出nb[i]股,价钱分别为pa[i]和pb[i],最大同时拥有p股 且一次交易后至少要间隔w天才能再次交易,初始有0股,本金无限,求最大收益 题解:dp[i][j]表示第 i 天,有 j 股的最大收益 状态转移 dp[i][j]=max{dp[i-1][j](不买不卖),dp[r][k]-(j-k)*pa[i](i-r>w,j-k<=na[i],买),dp[r][k]+…
题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2490 Parade Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 902    Accepted Submission(s): 396 Problem Description Panagola, The Lord of city F lik…
BZOJ_3831_[Poi2014]Little Bird_单调队列优化DP Description 有一排n棵树,第i棵树的高度是Di. MHY要从第一棵树到第n棵树去找他的妹子玩. 如果MHY在第i棵树,那么他可以跳到第i+1,i+2,...,i+k棵树. 如果MHY跳到一棵不矮于当前树的树,那么他的劳累值会+1,否则不会. 为了有体力和妹子玩,MHY要最小化劳累值. Input There is a single integer N(2<=N<=1 000 000) in the fi…