青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

PKU3017

Posted on 2011-07-08 12:40 Mato_No1 閱讀(508) 評論(1)  編輯 收藏 引用 所屬分類: 平衡樹動態規劃
【原題見這里

本沙茶見過的最猥瑣的DP題啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊……

設F[i]為將A[1..i]拆分成若干段的最大值最小和,則有
F[i]=min{F[j] + max[j+1, i]}(B[i]<=j<i),其中max[j+1, i]表示A[j+1..i]中的最大值,B[i]表示從i向左最遠可以延伸到哪里(也就是滿足SUM[x..i]<=m的最小的x值)。B數組可以通過預處理在O(N)時間內得到。
邊界:F[0]=0。

下面是優化過程。JZP神犇的論文里面已經夠詳細了。這里只是簡要說明一下。
首先容易證明,F是單調遞增的。
然后一個很關鍵的定理是:若F[i]的最優決策為j,則有A[j]>∀A[k](j<k<=i)。
證明:用反證法。若A[j+1..i]中存在不小于A[j]的值,則可得max[j..i]=max[j+1..i],又因為F單調遞增,所以F[j-1]+max[j..i]<=F[j]+max[j+1.i],即決策(j-1)一定不比決策j差,也就是決策j不可能成為最優決策。
這樣,可以維護一個下標嚴格遞增、A值嚴格遞減的隊列Q(即對于隊列中的任意兩個元素Q[i]和Q[j],若i<j,則Q[i].pos<Q[j].pos且A[Q[i].pos]>A[Q[j].pos],具體實現時pos可省略)。則可能成為最優決策的決策要么是在這個隊列Q里,要么是B[i]。對于隊列中的某個決策Q[x],該決策導出的值為F[Q[x]]+A[Q[x + 1]](很容易證明max[Q[x]+1..i]=A[Q[x + 1]]),找到這些導出的值中的最小值即可(注意,隊尾元素沒有導出值)。對于決策B[i],只需要在預處理的時候同時得到MAX[i]=max[B[i]+1..i]即可(也可以在O(N)時間內得到),決策B[i]導出的值為F[B[i]]+MAX[i]。
在刪除隊首過時元素的時候,需要把導出值也刪除,刪除隊尾元素也一樣,插入的時候,若插入前隊列不為空,則需要插入一個導出值。也就是,需要一個支持在對數時間內進行插入、刪除任意結點、找最小值等操作,顯然用平衡樹最好。

注意事項:
(1)不管是在隊首刪除還是在隊尾刪除,若刪除的是隊列中的最后一個元素,則不需要在平衡樹中刪除導出值;
(2)插入時,若插入前隊列為空,則不需要在平衡樹中插入導出值;
(3)在計算F[i]時,應先將決策i壓入。

代碼:
#include <iostream>
#include 
<stdio.h>
using namespace std;
#define re1(i, n) for (int i=1; i<=n; i++)
const int MAXN = 100001;
struct node {
    
int l, r, p, sz0, sz, mul;
    
long long v;
} T[MAXN];
const long long INF = ~0Ull >> 2;
int n, N = 0, a[MAXN], b[MAXN], MAX[MAXN], Q[MAXN], front = 0, rear = -1, root = 0;
long long m, F[MAXN], res = 0;
void init()
{
    cin 
>> n >> m;
    re1(i, n) scanf(
"%d"&a[i]); a[0= ~0U >> 2;
}
void prepare()
{
    re1(i, n) 
if (a[i] > m) {res = -1return;}
    
int x = 1;
    
long long sum = 0;
    re1(i, n) {
        
for (sum+=a[i]; sum>m; sum-=a[x++]) ;
        b[i] 
= x - 1;
    }
    re1(i, n) {
        
for (; front<=rear && Q[front]<=b[i]; front++) ;
        
for (; front<=rear && a[Q[rear]]<=a[i]; rear--) ;
        Q[
++rear] = i; MAX[i] = a[Q[front]];
    }
}
void vst(int x)
{
    
if (x) {
        cout 
<< T[x].v << ' ';
        vst(T[x].l); vst(T[x].r);
    }
}
void slc(int _p, int _c)
{
    T[_p].l 
= _c; T[_c].p = _p;
}
void src(int _p, int _c)
{
    T[_p].r 
= _c; T[_c].p = _p;
}
void upd(int x)
{
    T[x].sz0 
= T[T[x].l].sz0 + T[T[x].r].sz0 + T[x].mul;
    T[x].sz 
= T[T[x].l].sz + T[T[x].r].sz + 1;
}
void lrot(int x)
{
    
int y = T[x].p;
    
if (y == root) T[root = x].p = 0else {int p = T[y].p; if (y == T[p].l) slc(p, x); else src(p, x);}
    src(y, T[x].l); slc(x, y); T[x].sz0 
= T[y].sz0; T[x].sz = T[y].sz; upd(y);
}
void rrot(int x)
{
    
int y = T[x].p;
    
if (y == root) T[root = x].p = 0else {int p = T[y].p; if (y == T[p].l) slc(p, x); else src(p, x);}
    slc(y, T[x].r); src(x, y); T[x].sz0 
= T[y].sz0; T[x].sz = T[y].sz; upd(y);
}
void maintain(int x, bool ff)
{
    
int z;
    
if (ff) {
        
if (T[T[T[x].r].r].sz > T[T[x].l].sz) {z = T[x].r; lrot(z);}
        
else if (T[T[T[x].r].l].sz > T[T[x].l].sz) {z = T[T[x].r].l; rrot(z); lrot(z);} else return;
    } 
else {
        
if (T[T[T[x].l].l].sz > T[T[x].r].sz) {z = T[x].l; rrot(z);}
        
else if (T[T[T[x].l].r].sz > T[T[x].r].sz) {z = T[T[x].l].r; lrot(z); rrot(z);} else return;
    }
    maintain(T[z].l, 
0); maintain(T[z].r, 1); maintain(z, 0); maintain(z, 1);
}
int find(long long _v)
{
    
int i = root;
    
long long v0;
    
while (i) {
        v0 
= T[i].v;
        
if (_v == v0) return i; else if (_v < v0) i = T[i].l; else i = T[i].r;
    }
    
return 0;
}
int Find_Kth(int K)
{
    
int i = root, s0, m0;
    
while (1) {
        s0 
= T[T[i].l].sz0; m0 = T[i].mul;
        
if (K <= s0) i = T[i].l; else if (K <= s0 + m0) return i; else {K -= s0 + m0; i = T[i].r;}
    }
}
void ins(long long _v)
{
    
if (!root) {
        T[
++N].v = _v; T[N].l = T[N].r = T[N].p = 0; T[N].sz0 = T[N].sz = T[N].mul = 1; root = N;
    } 
else {
        
int i = root, j;
        
long long v0;
        
while (1) {
            T[i].sz0
++; v0 = T[i].v;
            
if (_v == v0) {T[i].mul++return;} else if (_v < v0) j = T[i].l; else j = T[i].r;
            
if (j) i = j; else break;
        }
        T[
++N].v = _v; T[N].l = T[N].r = 0; T[N].sz0 = T[N].sz = T[N].mul = 1if (_v < v0) slc(i, N); else src(i, N);
        
while (i) {T[i].sz++; maintain(i, _v > T[i].v); i = T[i].p;}
    }
}
void del(int x)
{
    
if (T[x].mul > 1) {
        T[x].mul
--while (x) {T[x].sz0--; x = T[x].p;}
    } 
else {
        
int l = T[x].l, r = T[x].r, p;
        
if (l && r) {
            
int y; while (y = T[l].r) l = y;
            T[x].v 
= T[l].v; T[x].mul = T[l].mul; p = T[l].p;
            
if (l == T[p].l) slc(p, T[l].l); else src(p, T[l].l);
            
while (p) {upd(p); p = T[p].p;}
        } 
else {
            
if (x == root) T[root = l + r].p = 0else {p = T[x].p; if (x == T[p].l) slc(p, l + r); else src(p, l + r); while(p) {upd(p); p = T[p].p;}}
        }
    }
}
long long h(int x)
{
    
return F[Q[x]] + a[Q[x + 1]];
}
void solve()
{
    F[
0= 0; front = 0; rear = 0; Q[0= 0;
    re1(i, n) {
        
for (; front<=rear && Q[front]<b[i];) {if (front < rear) del(find(h(front))); front++;}
        
for (; front<=rear && a[Q[rear]]<=a[i];) {if (front < rear) del(find(h(rear - 1))); rear--;}
        Q[
++rear] = i; if (front < rear) ins(h(rear - 1));
        
if (root) F[i] = T[Find_Kth(1)].v; else F[i] = INF;
        
if (F[b[i]] + MAX[i] < F[i]) F[i] = F[b[i]] + MAX[i];
    }
    res 
= F[n];
}
void pri()
{
    cout 
<< res << endl;
}
int main()
{
    init();
    prepare();
    
if (!res) solve();
    pri();
    
return 0;
}

Feedback

# re: PKU3017  回復  更多評論   

2012-05-15 10:05 by olyminfo
求 JZP神犇的論文 出處。。。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            久久免费一区| 亚洲综合第一| 欧美视频在线一区二区三区| 欧美福利一区| 欧美成人国产一区二区| 欧美激情视频一区二区三区在线播放| 欧美精品麻豆| 欧美激情一区在线观看| 欧美日韩高清免费| 国产精品久久久久aaaa| 国产精品主播| 精品成人一区二区三区四区| 国产精品视频专区| 欧美亚男人的天堂| 国产女主播一区| 尹人成人综合网| 亚洲乱码国产乱码精品精98午夜| 亚洲欧美激情精品一区二区| 亚洲一区二区三区在线视频| 久久9热精品视频| 久久久亚洲欧洲日产国码αv | 欧美aⅴ99久久黑人专区| 亚洲女人天堂成人av在线| 久久av老司机精品网站导航| 欧美成人乱码一区二区三区| 夜夜嗨网站十八久久| 欧美一级黄色录像| 欧美日韩国产一级| 一区二区在线观看视频| 久久人人爽人人爽| 欧美日韩一区成人| 国内精品伊人久久久久av一坑| 欧美日韩国产综合一区二区| 欧美日韩国产成人在线免费| 国产视频一区三区| 在线亚洲成人| 猫咪成人在线观看| 一区二区高清在线| 欧美成人精品福利| 激情视频一区| 午夜视频一区二区| 亚洲精品日产精品乱码不卡| 欧美在线视频全部完| 欧美三级小说| 亚洲精品美女在线观看| 欧美在线网址| 99pao成人国产永久免费视频| 久久er精品视频| 麻豆久久久9性大片| 亚洲免费综合| 国产精品爱啪在线线免费观看| 欧美久久电影| 国产综合色产在线精品| 亚洲欧美日韩精品一区二区| 亚洲三级视频| 毛片一区二区| 亚洲第一页在线| 美女精品一区| 久久激情久久| 黄色一区二区三区四区| 久久aⅴ国产紧身牛仔裤| 一区二区三区国产在线| 欧美日韩激情小视频| 亚洲精品女人| 亚洲激情视频在线观看| 欧美国产日韩一区| 日韩一区二区精品葵司在线| 国产精品视频yy9299一区| 国产日韩欧美综合一区| 欧美在线视频免费播放| 亚洲免费一在线| 国产欧美日本一区二区三区| 欧美在线亚洲一区| 久久国产精彩视频| 影音欧美亚洲| 亚洲国产美女久久久久| 欧美电影免费观看网站| 99精品热6080yy久久| 亚洲精品欧美极品| 欧美视频国产精品| 久久精品免费| 久久久久欧美精品| 91久久精品国产91性色| 亚洲电影下载| 亚洲国产精品一区二区www在线 | 欧美成人午夜激情在线| 久久精品亚洲精品| 伊人狠狠色j香婷婷综合| 欧美 亚欧 日韩视频在线| 欧美 日韩 国产 一区| 一本久久综合| 欧美在线关看| 亚洲最新视频在线| 亚洲欧美一级二级三级| 在线日本成人| 日韩视频免费在线观看| 国产欧美亚洲日本| 亚洲大片在线观看| 国产精品人人爽人人做我的可爱| 亚洲高清123| 亚洲美女免费视频| 国产一区二区三区视频在线观看| 欧美三级视频在线观看| 久久狠狠亚洲综合| 欧美1区2区3区| 欧美一区高清| 欧美女同视频| 美女久久一区| 国产精品视频一二三| 久久久亚洲一区| 欧美日韩亚洲免费| 免费成人av| 国产农村妇女精品| 亚洲欧洲中文日韩久久av乱码| 久久精品国产免费观看| 9人人澡人人爽人人精品| 亚洲欧美国产制服动漫| 日韩亚洲欧美成人| 久久亚洲欧洲| 久久青青草综合| 国产精品久久久久毛片大屁完整版| 一本色道久久综合狠狠躁篇怎么玩 | 欧美视频免费在线观看| 久久久久久久一区二区| 欧美另类变人与禽xxxxx| 久久福利精品| 国产精品久久久久久亚洲调教 | 狼人社综合社区| 性色av香蕉一区二区| 欧美精品一区在线播放| 欧美不卡高清| 国产欧美精品一区二区色综合| 欧美伊人久久久久久久久影院| 亚洲福利视频一区| 9色精品在线| 日韩一区二区精品在线观看| 久久综合九色欧美综合狠狠| 久久精品一本久久99精品| 国产精品毛片大码女人 | 亚洲精品国产精品国自产观看| 久久久久久久一区二区三区| 亚洲一区精品在线| 欧美日韩视频在线一区二区观看视频| 一区二区精品国产| 欧美电影在线观看| 亚洲国产欧美不卡在线观看| 亚洲福利视频二区| 蘑菇福利视频一区播放| 久久亚洲捆绑美女| 一区二区三区在线高清| 久久久噜噜噜久久狠狠50岁| 美乳少妇欧美精品| 亚洲激情网站| 欧美日韩mp4| 亚洲一区二区三区精品在线观看| 欧美性感一类影片在线播放| 亚洲精品午夜精品| 午夜在线一区| 狠狠久久婷婷| 欧美激情日韩| 亚洲在线成人| 欧美mv日韩mv国产网站| 亚洲国产精品99久久久久久久久| 亚洲国产一区二区三区a毛片| 欧美精品 日韩| 日韩午夜免费| 欧美在线视频免费观看| 在线免费不卡视频| 欧美另类videos死尸| 亚洲综合日本| 欧美成人四级电影| 亚洲一区二区免费视频| 国产午夜精品一区二区三区欧美 | 国产精品入口66mio| 欧美亚洲自偷自偷| 久久亚洲国产精品日日av夜夜| 欧美日韩在线另类| 亚洲视频精品| 久久久久久久综合狠狠综合| 亚洲网站视频福利| 久久精品99国产精品| 亚洲国产你懂的| 欧美成人免费大片| 亚洲免费视频在线观看| 亚洲高清激情| 久久久91精品国产一区二区三区| 欧美日韩高清在线一区| 欧美亚洲系列| 亚洲精品在线一区二区| 午夜精品久久久久久久99樱桃| 欧美成人精品在线观看| 亚洲精一区二区三区| 久久男女视频| 欧美精品一区二区三区四区 | 在线亚洲+欧美+日本专区| 久久精品亚洲国产奇米99| 99re6热在线精品视频播放速度| 久久久水蜜桃| 在线视频欧美日韩精品| 亚洲国产成人久久|