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