1. 程式人生 > >bzoj4709 -- 決策單調性優化DP

bzoj4709 -- 決策單調性優化DP

顯然每個區間左右端點大小相等是最優的,否則可以把不相等的分出去。
於是可以列出DP方程:

fi=max{fj1+ai×(sisj+1)2,ai=aj}
由於二次函式是下凸的,可以用決策單調性優化。
#include<bits/stdc++.h>
using namespace std;
#define N 100010
#define M 10010
#define ll long long
vector<int>st[M];
inline char nc(){
    static char buf[100000],*p1=buf,*p2=buf;
    return p1==p2&&(p2=(p1=buf)+fread(buf,1
,100000,stdin),p1==p2)?EOF:*p1++; } inline void Read(int& x){ char c=nc(); for(;c<'0'||c>'9';c=nc()); for(x=0;c>='0'&&c<='9';x=(x<<3)+(x<<1)+c-48,c=nc()); } ll f[N]; int i,j,k,n,m,p,s[N],c[M]; int x; inline ll Get(int x,int y,int z){ return f[x-1]+1ll*z*(y-s[x]+1
)*(y-s[x]+1); } inline int Find(int x,int y,int z){ int l=max(s[x],s[y]),r=n; while(l<=r){ int Mid=l+r>>1; if(Get(x,Mid,z)<=Get(y,Mid,z))r=Mid-1;else l=Mid+1; } return l; } int main(){ Read(n); for(i=1;i<=n;i++){ Read(x);s[i]=++c[x]; while
(st[x].size()>=2&&Find(st[x][(int)st[x].size()-1],st[x][(int)st[x].size()-2],x)<Find(i,st[x][(int)st[x].size()-1],x))st[x].pop_back(); st[x].push_back(i); while(st[x].size()>=2&&Get(st[x][(int)st[x].size()-1],s[i],x)<Get(st[x][(int)st[x].size()-2],s[i],x))st[x].pop_back(); f[i]=Get(st[x][(int)st[x].size()-1],s[i],x); } cout<<f[n]<<endl; return 0; }

相關推薦

bzoj4709 -- 決策調性優化DP

顯然每個區間左右端點大小相等是最優的,否則可以把不相等的分出去。 於是可以列出DP方程: fi=max{fj−1+ai×(si−sj+1)2,ai=aj} 由於二次函式是下凸的,可以用決策單調性優

Codeforces 868F. Yet Another Minimization Problem【決策調性優化DP】【分治】【莫隊】

LINK 題目大意 給你一個序列分成k段 每一段的代價是滿足\((a_i=a_j)\)的無序數對\((i,j)\)的個數 求最小的代價 思路 首先有一個暴力dp的思路是\(dp_{i,k}=min(dp_{j,k}+calc(j+1,i))\) 然後看看怎麼優化 證明一下這個DP的決策

BZOJ4899: 記憶的輪廓【概率期望DP】【決策調性優化DP

Description 通往賢者之塔的路上,有許多的危機。 我們可以把這個地形看做是一顆樹,根節點編號為1,目標節點編號為n,其中1-n的簡單路徑上,編號依次遞增, 在[1,n]中,一共有n個節點。我們把編號在[1,n]的叫做正確節點,[n+1,m]的叫做錯誤節點。一個葉子,如果是正 確節點則為正確葉

[BZOJ4850][JSOI2016]燈塔(分塊/決策調性優化DP)

第一種方法是決策單調性優化DP。 決策單調性是指,設i>j,若在某個位置x(x>i)上,決策i比決策j優,那麼在x以後的位置上i都一定比j優。 根號函式是一個典型的具有決策單調性的函式,由於根號函式斜率遞減,所以i決策的貢獻的增長速度必定比j快。 於是使用基礎的決策單調性優化即可。 注意兩

[NOI2009]詩人小G(決策調性優化dp

【題解】 經典的1D1D動態規劃優化  狀態轉移方程:f[i]=min{ f[j]+abs(s[i]-s[j]+i-j-1-l)^p }  決策單調性及證明: http://blog.csdn.net/jasonzhu8/article/details/5928552 因此

[BZOJ4709][JSOI2011]檸檬[決策調性優化]

有太多題解在瞎寫,發這個主要是提醒一下不要被傻逼們寫的東西誤導 我好幾次想要把這個題想明白,但那些所謂的“題解”讓我浪費了許多天時間 如果說上面那些題解裡說的“時間”本意是指s[i]而不是轉移過來的位置,那麼原諒我語文不好 二分的是s[i],單調棧裡的元素比較關鍵字也是s[i],而不是位置 #i

[NOI2009]詩人小G(dp + 決策調性優化

題意 有一個長度為 \(n\) 的序列 \(A\) 和常數 \(L, P\) ,你需要將它分成若干段,每 \(P\) 一段的代價為 \(| \sum ( A_i ) − L|^P\) ,求最小代價的劃分方案。 \(n \le 10^5 , 1 \le P \le 10\) 題解 考慮暴力 \(O(n^2)\)

bzoj 4899 記憶的輪廓 題解(概率dp+決策調性優化

題目背景 四次死亡輪迴後,昴終於到達了賢者之塔,當代賢者夏烏拉一見到昴就上前抱住了昴“師傅!你終於回來了!你有著和師傅一樣的魔女的餘香,肯定是師傅”。眾所周知,大賢者是嫉妒魔女沙提拉的老公,400年前與神龍、劍聖一起封印魔女因子暴走的莎緹拉。在魔女茶會的時候,莎緹拉也表示過對昴濃濃的

決策調性優化

決策單調性是對於一些dp式子,比如說ans[i] = max(a[j] + sqrt(i-j)) (j < i) 如果在一個i滿足a[j] + sqrt(i-j) < a[k] + sqrt(i - k)且j<k,那麼可以發現在i變大的時候j也一定會比k劣,沒有優於k的

[BZOJ5125]小Q的書架(決策調性+分治DP+樹狀陣列)

顯然有決策單調性,但由於逆序對不容易計算,考慮分治DP。 solve(k,x,y,l,r)表示當前需要選j段,待更新的位置為[l,r],這些位置的可能決策點區間為[x,y]。暴力計算出(l+r)/2的決策位置s,兩邊遞迴下去繼續操作。solve(k,x,s,l,mid-1),solve(k,s,y,mid+

[BZOJ5125]小Q的書架(決策調性+分治DP+樹狀數組)

() 樹狀數組 數組 += mil ace pan turn 更新 顯然有決策單調性,但由於逆序對不容易計算,考慮分治DP。 solve(k,x,y,l,r)表示當前需要選j段,待更新的位置為[l,r],這些位置的可能決策點區間為[x,y]。暴力計算出(l+r)/2的決策

CodeForces 868F Yet Another Minimization Problem(決策調性優化 + 分治)

efi isp size fine logs res namespace c++ 得到 題意 給定一個序列 \(\{a_1, a_2, \cdots, a_n\}\),要把它分成恰好 \(k\) 個連續子序列。 每個連續子序列的費用是其中相同元素的對數,求所有劃分中的費用之

bzoj4518: [Sdoi2016]征途(DP+決策調性分治優化

clas code -1 long long lib fine bsp char click   題目要求...   化簡得...   顯然m和sum^2是已知的,那麽只要讓sigma(si^2)最小,那就變成了求最小平方和的最小值,經典的決策單調性,用分治優

bzoj 2216 [Poi2011]Lightning Conductor 決策調性+dp

pre inline 假設 int efi 當前 www. 記錄 sin 題面 題目傳送門 解法 決策單調性比較經典的題吧 題目就是要對於每一個\(i\)求\(f_i=max(a_j-a_i+\sqrt{|i-j|}))\) 可以發現,\(\sqrt n\)的增長速度比較慢

bzoj 1563 [NOI2009]詩人小G 決策調性+dp

ref bit std online mes pac c++ () include 題面 題目傳送門 解法 可以得到一個顯然的dp方程 $\(f_i=min(f_j+(s_i-s_j+i-j-1-L)^p)\) 不妨把後面的東西看成\(w(j,i)\) 所以就變成\(f_i

洛谷P2900 [USACO08MAR]土地征用Land Acquisition(動態規劃,斜率優化決策調性,線性規劃,單調隊列)

tps include 寫法 lan clas com mat 成了 dong 用兩種不一樣的思路立體地理解斜率優化,你值得擁有。 題意分析 既然所有的土地都要買,那麽我們可以考慮到,如果一塊土地的寬和高(其實是蒟蒻把長方形立在了平面上)都比另一塊要小,那麽肯定是直接並購,

BZOJ4709】檸檬(決策調性)

題目連結 題目描述 Flute 很喜歡檸檬。它準備了一串用樹枝串起來的貝殼,打算用一種魔法把貝殼變成檸檬。貝殼一共有 N (1 ≤ N ≤ 100,000) 只,按順序串在樹枝上。為了方便,我們從左到右給貝殼編號 1..N。每隻貝殼的大小不一定相同,

決策調性DP學習小記

四邊形不等式 解決形如這樣的DP式子的問題 F i

Codeforces Round #190 (Div. 1): E. Ciel and Gondolas(決策調性DP+wqs二分)

題意: 同一道題目,但是bzoj可能需要讀入掛 思路: wqs二分 沒什麼可講的了 #include<stdio.h> #include<string.h> #include<algorithm>

[JZOJ5976] 打怪獸 【DP】【決策調性

Description Solution 首先發現性質 可以看出,如果上一次疊的甲還沒有掉完,那麼此時是不會疊甲的 因為這時候疊甲,不如把這些甲移到上次一起疊,那麼肯定是更優的。 那麼現在就相當於用若干個下降且不交的三角形來覆蓋這個序列。 考慮DP 設