luogu1103書本整理

2021-07-24 02:51:34 字數 1093 閱讀 4265

題目描述

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)

下面的n行,每行兩個數字表示一本書的高度和寬度,均小於200。

保證高度不重複

輸出格式:

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

首先要注意要按高度sort一遍後再做dp,看題還是要仔細;

對於dp本身,是要求去掉k本書後的最小絕對值之和;暈了半下午之後被告知這是個lis的變型。。。。。。瞬間感覺又弱了不少

既然是子串行型別的題目,我們不妨把將去掉k本書轉化為留下n-k本書以方便轉移;

f[i][j]表示以i結尾是留j本書的最小值;

同樣,模擬子串行型別的題目,推出方程

f[i][j]=min(f[i][j],f[t][j-1]+abs(a[i]-a[t]));(1<=t< i)

f[t][j-1]表示以t結尾留j-1本書的時候的最小值

abs(a[i]-a[t])表示留第i本書時產生的差,

#include

#include

#include

#include

#include

using

namespace

std;

const

int maxn=500;

int f[maxn][maxn];

struct ff

P1103 書本整理

題意 給出n本書 每本書有高度和寬度,題意讓我們先講高度排序 保證每一本書的高度不同,從大從小排對答案不影響 相鄰的書的寬度差的絕對值為貢獻,讓我們去掉其中k本書,求最小貢獻 思路 去掉書的想法很難實現,我們逆向思維,在其中增加n k本書 那我們設定乙個dp i j 表示第i本書前面的所有書 包括第...

P1103 書本整理

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

P1103 書本整理 dp

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