題解 P1103 書本整理

2022-02-13 08:49:36 字數 1507 閱讀 8227

一道很好的dp入門題,~~適合像我這種學了大半年卻還不會dp的人。~~

首先,題目要求我們將書本按照高度排序,在這裡我們可以用結構體實現。

其次才是重點,推dp方程。

題目中說抽走k本書,我們不妨轉換一下:

從n本書中留下(n - k)本。

然後,尋找每本書之間的關係:

對於第一本書,如果留下,花費顯然只能是0。

對於第二本書,如果留下:

1、可以選擇將自己作為開頭,或者與前面的書連在一起。

2、當然,我們也可以不留下。

對於第三本書,如果留下:

1、自己作為開頭

2、與第一本書連線或者與第二本書連線

3、不留下

那麼,我們想辦法將每本書的與前面的書形成聯絡:

設定$f_$表示第$i$本書,與前面的書連線形成長為$j$的連線。

那麼,有:

$f_$ = 0

$f_$ = min($f_$, $f_$ + $abs$($w_i$ - $w_x$) 其中$x$指與前面連線的書的編號。

那麼,廢話不多說,上**:

#include using

namespace

std;

#define n 1010inline

intread()

while

(isdigit(c))

return x *s;

} int

f[n][n];

struct

node t[n];

bool

cmp(node a, node b)

intmain()

sort(t + 1, t + n + 1

, cmp);

memset(f,

127, sizeof

(f));

for(int i = 1;i <= n; i++)

for(int i = 2;i <= n; i++)} }

int ans = (int

)9e9;

for(int i = 1; i <= n; i++)

ans = min(ans, f[i][n -k]);

printf(

"%d\n

", ans);

return0;

}

P1103 書本整理 題解

csdn同步 原題鏈結 簡要題意 給定 n 個二元組 你的任務首先要將它們按照 x 排序 保證 x 兩兩不同 然後從中去掉 k 個二元組,使得剩下的每相鄰二元組 y 的差的絕對值之和最小,求這個最小值。n leq 100 x,y leq 200 原題中書的高度即為 x 書的寬度即為 y 首先我們建立...

P1103 書本整理

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

P1103 書本整理

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