洛谷 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 #include6using
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本書,使得書架可以看起來整齊一點。書架的不整齊度是這樣定義的 每...