一道無語的貪心題......

名字是模仿的HYC小牛 ......

題目確實很無語:

 

 

巧克力

【問題描述】

現在,你有一個n*m的巧克力塊,


你要把它們切成1*1的小塊。每次你可以豎直的切或者水平的切,每切一次都有一定的費用。並且,當你把一大塊巧克力切成兩部分後,你在第一部分如何切不會切到第二部分。比如先全部水平切,再豎直切,費用是

(y1+y2+y3)+4*(x1+x2+x3+x4+x5)

【輸入格式】

第一行兩個數n,m

接下來一行,n-1個數,表示yi

接下來一行,m-1個數,表示xi

【輸出格式】

輸出一個數,表示把巧克力切成1*1的小塊用的最少費用

【樣例輸入】

2 3

2

1 3

【樣例輸出】

9

【數據說明】

30%:n,m,xi,yi <=100

70%: n,m,xi,yi <=100000

100%:n,m,xi,yi<=500000

 

 

 

我想了一個n*K的動規:設f[i][j]爲在與Y軸平行的方向切了i,在與X軸平行的方向切了j的最小代價,則有f[i][j]=min{f[i-1][j]+x[i]*(j+1),f[i][j-1]+y[j]*(i+1) | 0≤i≤m-1,0≤j≤n-1},f[0][0]=0。稍微分析一下這個DP:每次都是單純的代價相加得到總代價,所以,一般地,每一次的最優值都是由前一次的的最優值得到,符合最優子結構性質。並且,對於每一個狀態下一步該如何進行操作,與前面的得分和操作無關,滿足無後效性。既滿足了最優子結構性質又滿足無後效性,似乎本題就這樣解決了,

將兩個序列分別按權值排成降序,這個序列就是我們需要的最優序列。



n*k看了看範圍怎麼都會超......



正解如下(勿噴):

 

 

 

  將所有的數據排序,然後從小到大模擬......(就這樣,真的就這樣......)

 

 

老規矩,貼代碼:



 

 

 

 

發佈了26 篇原創文章 · 獲贊 2 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章