洛谷 P1103 書本整理(動規)

2022-07-12 07:57:09 字數 1862 閱讀 3931

洛谷 p1103 書本整理

frank是乙個非常喜愛整潔的人。他有一大堆書和乙個書架,想要把書放在書架上。書架可以放下所有的書,所以frank首先將書按高度順序排列在書架上。但是frank發現,由於很多書的寬度不同,所以書看起來還是非常不整齊。於是他決定從中拿掉k本書,使得書架可以看起來整齊一點。

書架的不整齊度是這樣定義的:每兩本書寬度的差的絕對值的和。例如有4本書:

1x2 5x3 2x4 3x1 那麼frank將其排列整齊後是:

1x2 2x4 3x1 5x3 不整齊度就是2+3+2=7

已知每本書的高度都不一樣,請你求出去掉k本書後的最小的不整齊度。

輸入格式:

第一行兩個數字n和k,代表書有幾本,從中去掉幾本。(1<=n<=100, 1<=k下面的n行,每行兩個數字表示一本書的高度和寬度,均小於200。

保證高度不重複

輸出格式:

一行乙個整數,表示書架的最小不整齊度。

輸入樣例#1:

4 11 22 43 15 3

輸出樣例#1:

3

題解:

f[i][j]: 在考慮前i個時拿走j本且i必保留時的最優解

狀態轉移方程

f[i][j]=f[l=(i-j-1 to i-1)][j-(i-l-1)]+|a[i]-a[l]|

前i個時拿走j本且i必保留時的最優解,他當然可以是在

前l個中拿一些書並把l到i間的書全拿走造成的;

即,前i個時拿走j本且i必保留時的最優解,為前l(找出這個l)

個時拿走j-(i-l-1)本且l必保留時的最優解,加i與l的差;

然後在合適的區間內(i-j-1 to i-1)迴圈l使之最優;

1 #include2 #include3 #include4 #include5 #include6

using

namespace

std;

7struct

bos[105

];10

int comp(const bo& x,const bo&y)

1116

int n,k,f[105][105],a[105][105],minn=1000000;17

intmain()}

33for(int i=n-k;i<=n;i++)

34

36 cout<37 }

洛谷P1103 書本整理

frank是乙個非常喜愛整潔的人。他有一大堆書和乙個書架,想要把書放在書架上。書架可以放下所有的書,所以frank首先將書按高度順序排列在書架上。但是frank發現,由於很多書的寬度不同,所以書看起來還是非常不整齊。於是他決定從中拿掉k本書,使得書架可以看起來整齊一點。書架的不整齊度是這樣定義的 每...

P1103 書本整理(洛谷)

frank是乙個非常喜愛整潔的人。他有一大堆書和乙個書架,想要把書放在書架上。書架可以放下所有的書,所以frank首先將書按高度順序排列在書架上。但是frank發現,由於很多書的寬度不同,所以書看起來還是非常不整齊。於是他決定從中拿掉k本書,使得書架可以看起來整齊一點。書架的不整齊度是這樣定義的 每...

動態規劃 洛谷P1103 書本整理

frank是乙個非常喜愛整潔的人。他有一大堆書和乙個書架,想要把書放在書架上。書架可以放下所有的書,所以frank首先將書按高度順序排列在書架上。但是frank發現,由於很多書的寬度不同,所以書看起來還是非常不整齊。於是他決定從中拿掉k本書,使得書架可以看起來整齊一點。書架的不整齊度是這樣定義的 每...