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

pku 1180 Batch Scheduling 經典斜率優化

題意:
N個任務,每個任務有兩個參數,完成需要的時間t以及因子f,現在將這些任務分組,加工每個分組前機器需要冷卻時間start,完成一組任務耗時為 t + Start + (Tx + Tx+1 + ... + Tx+k),問最少耗費的時間。
解法:
首先先解決這個問題,在這種分組數不確定的問題中,根據背包九講中無限背包的策略,外層循環只要一層即可完成。
關鍵是內重循環還要枚舉本組的起始位置,如果暴力的做就要N2了。
下面試圖對初始的DP方程進行優化
考慮兩種規劃方向,第一種規劃方向是從前到后
dp[i]=min{dp[k]+(dp[k]+sumt(i)-sumt(k)+start)*(sumf(i)-sumf(k))} 無比復雜的一個式子,推了N小時,在這個式子上下手似乎非常困難。。。(3個決策變量)
但是,如果換種思路,從后向前,將sumt以及sumf重新定義為最后一個任務到第i個任務的時間和和參數和,這樣就簡單多了。
dp[i]=min{dp[k]+(sumt(i)-sumt(k)+start)*sumf(i)}
然后很輕易能發現這個滿足斜率優化的條件(2個待定決策變量,sumt(k)和dp(k))。
關于斜率優化,一般有代數和幾何兩種方法。先說幾何方法
令g=dp[k]+(sumt(i)-sumt(k)+start)*sumf(i)},y=dp[k],x=sumt[k]
現在要使g最小
將式子整理下
y=sumf(i)*x+f-(start+sumt(i))*sumf(i)
將這個看做一個線性函數,目標要使得截距最小
再觀察一下,斜率sumf(i)恒為正,且是隨著i單調遞減的,換句話說,是隨著規劃的過程單調遞增的,而自變量x也是隨著規劃的過程單調遞增的。我們畫個圖比劃下

首先,我們要維護的是一個上凹線,因為凹線內部的點不會被斜率為正的直線切到。再者,我們發現最優決策就在凹線的左端。我們來觀察藍色的線,假設這個是第i階段的決策線,灰色凹線與藍色線切點左側的綠色部分顯然是可以丟棄的。應為在切點處截距達到最小。并且在以后的決策中(淺藍色的線),該段同樣不會有任何作用。根據以上觀察,我們可以使用棧隊列(很多人簡稱為單調隊列)的數據結構。這個東西網上介紹的比較多,我就不細說了。
第二種方法就是代數法。
我看網上有一個牛寫的不錯,就貼過來吧- -

引自http://hi.baidu.com/wangkun_zhen/blog/item/5e85d0cc4fb887590fb345dd.html     dp[i] = min{dp[j] + (S + sumT[i] - sumT[j]) * sumF[i]        { i < j <= n + 1 }  
                                                                      邊界條件 dp[n+1] = 0
                                                                                     sumT[n+1]=sumF[n+1]=0
         
        
可以清楚的看到,此種DP方法的時間復雜度是O(n^2)的,那么如何降低復雜度呢?


經典的優化分析:
        
我們考慮在計算dp[i]時,對于i < j < k來說, 如果保證決策k比決策j大的條件是:

         dp[j] + (S + sumT[i] - sumT[j]) * sumF[i] < dp[k] + (S + sumT[i] - sumT[k]) * sumF[i]


通過移項整理,可以化簡為:

                        (dp[j] - dp[k]) / (sumT[j] - sumT[k]) < sumF[i]

這個類似于斜率的東西又怎么來優化?
為了證明和更好的說明接下來的優化,我們定義這么幾個變量:
設:   
                  d[i, x] = dp[x] + (S + sumT[i] - sumT[x]) * sumF[i] ;                 
                  g[j, k] = (dp[j] - dp[k]) / (sumT[j] - sumT[k])

那么我們可以總結一下上面推出來的式子:

根據上面有:
                               i<j<k
同理可證:             d[i, j] < d[i, k]    <=>   g[j, k] < sumF[i]         決策j比決策k

進而我們發現這么一個問題,當i < j < k < l時,如果有g[j, k] < g[k, l],那么k永遠都不會成為計算dp[i]時的決策點。

證明:
如果g[j, k] < g[k, l],那么我們可以分兩個方面考慮g[j, k]sumF[i]的關系:
(1)
如果g[k, l] >= sumF[i],那么決策k大于等于決策l,也就說決策k不可能是決策點
(2)
如果g[j, k] < sumF[i],那么決策k要大于決策j,所以k也不可能是決策點

根據上面的結論和一些特性,我們可以考慮維護一個斜率的雙向隊列來優化整個DP過程:

(1)
假設i(馬上要入隊的元素) <j< k依次是隊列尾部的元素,那么我們就要考慮g[i, j]是否大于g[j, k],如果g[i, j] < g[j, k],那么可以肯定j一定不會是決策點,所以我們可以從隊列中將j去掉,然后依次向前推,直到找到一個隊列元素少于3個或者g[i j] >= g[j, k]的點才停止。
(2)
假設a>b(a是頭元素)是依次是隊列頭部的元素,那么我們知道,如果g[b, a] < sumF[i]的話,那么對于i來說決策點b肯定優于決策點a,又由于sumF[i]是隨著i減少而遞增的(這個就是為什么倒推的原因),所以當g[a, b] < sumF[i]時,就一定有g[a, b] < sumF[i-1],因此當前的決策點a不僅僅在考慮dp[i]時不會是最佳決策點,而且在后面的DP中也一定不會是最佳決策點,所以我們可以把a從隊列 的頭部刪除,依次往后如此操作,直到隊列元素小于2或者g[b, a] >= sumF[i]
(3)
對于i的更新,一定是隊列頭部的決策點最好,所以O(1)即可轉移。


初始化的時候要注意,必須在n+1的位置處加一個虛擬的狀態,不能將第一個狀態(即i=n的狀態)作為初始狀態,因為可能將所有任務僅分為一段。
代碼:

 

 1# include <stdio.h>
 2# define N 10005
 3int n,start,st[N],sf[N];
 4int q[N],s=-1,e=0;
 5int dp[N];
 6int cmp(const int a,const int b,const int k)
 7{
 8    if(dp[b]-dp[a]<(long long)k*(st[b]-st[a])) return -1;
 9    else if((long long)dp[b]-dp[a]==(long long)k*(st[b]-st[a])) return 0;
10    else return 1;
11}

12int cmp1(const int y1,const int x1,const int y2,const int x2,const int y3,const int x3)
13{
14    if(((long long)y3-y2)*(x2-x1)<((long long)y2-y1)*(x3-x2)) return -1;
15    else if(((long long)y3-y2)*(x2-x1)==((long long)y2-y1)*(x3-x2)) return 0;
16    else return 1;
17}

18int main()
19{
20    int i;
21    scanf("%d%d",&n,&start);
22    for(i=0;i<n;i++)
23        scanf("%d%d",st+i,sf+i);
24    for(i=n-2;i>=0;i--)
25    {
26        st[i]+=st[i+1];
27        sf[i]+=sf[i+1];
28    }

29    q[e]=n;
30    dp[n]=0;
31    for(i=n-1;i>=0;i--)
32    {
33       while(e>=s+2&&cmp(q[s+1],q[s+2],sf[i])!=1) s++;
34       dp[i]=dp[q[s+1]]+(start+st[i]-st[q[s+1]])*sf[i];
35       while(e>=s+2&&cmp1(dp[q[e-1]],st[q[e-1]],dp[q[e]],st[q[e]],dp[i],st[i])!=1) e--;
36       q[++e]=i;
37    }

38    printf("%d\n",dp[0]);
39    return 0;
40}

41

posted on 2011-01-03 21:52 yzhw 閱讀(656) 評論(1)  編輯 收藏 引用 所屬分類: DP

評論

# re: pku 1180 Batch Scheduling 經典斜率優化 2011-04-04 14:27 ningbohezhijun

博主,此題感覺很難,自認為勉強看懂吧,但是為什么說這題很經典呢?有什么推廣價值嗎?  回復  更多評論   

<2011年1月>
2627282930311
2345678
9101112131415
16171819202122
23242526272829
303112345

導航

統計

公告

統計系統

留言簿(1)

隨筆分類(227)

文章分類(2)

OJ

最新隨筆

搜索

積分與排名

最新評論

閱讀排行榜

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久久久久久成人| 亚洲永久网站| 久久精品论坛| 亚洲美洲欧洲综合国产一区| 午夜精品美女久久久久av福利| 欧美日韩一区二| 亚洲日本理论电影| 99精品久久免费看蜜臀剧情介绍| 美女主播视频一区| 亚洲精品视频一区| 欧美激情一区在线| 老牛嫩草一区二区三区日本| 国模私拍一区二区三区| 午夜宅男久久久| 午夜日韩电影| 好吊视频一区二区三区四区| 亚洲人成绝费网站色www| 久久男女视频| 99re6这里只有精品| 欧美国产亚洲精品久久久8v| 欧美激情视频网站| 亚洲国产日韩欧美| 日韩视频中文| 欧美日韩一区二区三区在线观看免 | 销魂美女一区二区三区视频在线| 欧美在线中文字幕| 午夜久久久久久| 国产精品theporn| 亚洲无亚洲人成网站77777| 最新国产乱人伦偷精品免费网站| 一区二区三区毛片| 久久久xxx| 欧美精品久久99| 欧美成人精品不卡视频在线观看| 国产日韩欧美一区| 在线视频欧美日韩| 在线亚洲国产精品网站| 久久精品亚洲一区二区| 欧美一区二区网站| 国产精品欧美一区喷水| 日韩视频不卡| 亚洲卡通欧美制服中文| 欧美不卡高清| 亚洲大胆美女视频| 亚洲国产精品久久久久秋霞不卡 | 亚洲一区二区免费看| 久久久久这里只有精品| 欧美一区二区三区精品| 国产伦精品一区二区| 久久精品一区二区三区四区| 午夜欧美大片免费观看| 国产裸体写真av一区二区| 亚洲欧美精品一区| 蜜臀av一级做a爰片久久| 亚洲电影下载| 欧美成人精品三级在线观看| 亚洲二区在线观看| 日韩视频免费观看高清完整版| 欧美激情aaaa| 亚洲一区免费网站| 亚洲国产99| 亚洲欧美日韩国产一区二区三区| 国产精品中文字幕在线观看| 香蕉久久夜色精品国产使用方法| 久久国产精品免费一区| 欧美专区在线| 夜夜爽www精品| 男女av一区三区二区色多| 亚洲午夜精品久久久久久app| 欧美一区二区啪啪| 亚洲一区二区免费在线| 猛男gaygay欧美视频| 久久国产综合精品| 欧美三级午夜理伦三级中视频| 欧美成人一二三| 狠狠色综合日日| 欧美一级日韩一级| 小黄鸭视频精品导航| 欧美色精品天天在线观看视频| 亚洲高清资源综合久久精品| 韩国v欧美v日本v亚洲v| 欧美中文字幕在线播放| 性欧美大战久久久久久久免费观看| 欧美高清成人| 亚洲国产你懂的| 最新高清无码专区| 免费看亚洲片| 亚洲缚视频在线观看| 亚洲第一福利视频| 久久五月激情| 免费成人毛片| 亚洲国产精品久久久久秋霞影院| 久久国产黑丝| 老鸭窝91久久精品色噜噜导演| 激情五月婷婷综合| 久久久久在线| 亚洲高清不卡av| 99视频一区| 欧美日韩一二三区| 亚洲图片你懂的| 久久精品99国产精品| 一区二区视频在线观看| 久久综合伊人| 91久久在线观看| 亚洲视频精品在线| 国产精品亚洲欧美| 久久黄色影院| 亚洲国产成人久久综合| 日韩亚洲欧美精品| 国产精品久久97| 久久精品成人欧美大片古装| 欧美电影电视剧在线观看| 日韩视频中文| 国产精品一区在线播放| 久久精品九九| 日韩写真视频在线观看| 久久激五月天综合精品| **欧美日韩vr在线| 欧美日韩一卡二卡| 久久九九国产| 亚洲精品影院在线观看| 欧美一区日本一区韩国一区| 在线观看国产成人av片| 欧美日韩不卡一区| 欧美综合国产| 一本久久a久久免费精品不卡 | 亚洲国产精品黑人久久久| 洋洋av久久久久久久一区| 国产深夜精品| 欧美猛交免费看| 久久国产精品毛片| 亚洲精品中文字幕有码专区| 欧美日韩综合久久| 欧美主播一区二区三区美女 久久精品人| 免播放器亚洲| 午夜综合激情| 一二三区精品| 亚洲国产欧美一区二区三区久久| 欧美日韩亚洲综合一区| 久久在线免费观看视频| 亚洲性线免费观看视频成熟| 欧美不卡视频一区发布| 香蕉成人啪国产精品视频综合网| 亚洲日本理论电影| 在线电影院国产精品| 国产视频自拍一区| 欧美日韩三级电影在线| 两个人的视频www国产精品| 亚洲免费视频中文字幕| 亚洲精品视频一区二区三区| 麻豆91精品91久久久的内涵| 欧美一级视频| 亚洲一区二区不卡免费| 一本一道久久综合狠狠老精东影业 | 国产精品高清在线| 欧美电影在线播放| 农村妇女精品| 久久精品一区| 欧美亚洲尤物久久| 亚洲一区二区免费视频| 亚洲免费观看高清完整版在线观看熊 | 久久影视三级福利片| 亚洲欧美日韩在线综合| 一区二区高清在线观看| 日韩视频免费看| 日韩网站在线看片你懂的| 1024国产精品| 精品成人在线| 精品69视频一区二区三区| 国产日韩综合| 国产亚洲午夜高清国产拍精品| 国产精品国产三级国产| 欧美视频中文在线看| 欧美日韩三区| 国产精品日韩久久久| 国产伦精品免费视频 | 亚洲国产高清视频| 欧美国产专区| 亚洲国产综合视频在线观看| 亚洲第一视频| 欧美日韩中字| 欧美fxxxxxx另类| 欧美激情小视频| 欧美日韩二区三区| 欧美日韩在线影院| 欧美午夜一区二区| 国产精品揄拍500视频| 国内外成人免费激情在线视频| 国产一区二区无遮挡| 影音先锋另类| 亚洲日本成人女熟在线观看| 亚洲精品网址在线观看| 亚洲图片欧洲图片日韩av| 亚洲欧美日韩第一区| 久久www成人_看片免费不卡| 久久人91精品久久久久久不卡| 免费国产一区二区| 亚洲人成小说网站色在线| 一个色综合导航| 久久国产成人|