SSL2081 書本整理 dp

2021-07-30 14:28:08 字數 1303 閱讀 5440

書本整理

description

小明的書架上放了很多書,為了使書架變得整潔,小明決定整理書架,他將所有書安高度大小排列,這樣排了之後雖然整齊了許多,但小明發現,書本的寬度不同,導致書架看上去還是有些凌亂。小明將這個凌亂值定義為相鄰兩本書的寬度差的絕對值的和。 

例如有4本書 

1*2 

5*3 

2*4 

3*1 

小明將其排列整齊後的順序是: 

1*2 

2*4 

3*1 

5*3 

凌亂值為2+3+2=7。 

於是小明決定拿掉其中的k本書,並使凌亂值最小。 

已知每本書的高度都不一樣。 

input

第一行兩個數n和k,代表書的總數共有n 本,要求從中去掉k本書。(1=

output

一行乙個整數,表示去掉k本書後,書架的最小凌亂值。

分析:f[i,j]表示前i本書保留j本書在書架上時的最小凌亂值,f[i,j]=min(f[o,j-1]+abs(a[o]-a[i]))  (j

**

const

maxn=100;

var f:array[0..maxn,0..maxn] of longint;

a,b:array[0..maxn] of longint;

n,m,i,j,k,ans:longint;

function min(x,y:longint):longint;

begin

if xa[j] then

begin

a[0]:=a[i];a[i]:=a[j];a[j]:=a[0];

b[0]:=b[i];b[i]:=b[j];b[j]:=b[0];

end;

for i:=2 to n do

for j:=2 to n-m do

begin

if j>i then break;

f[i,j]:=maxlongint;

for k:=j-1 to i-1 do

f[i,j]:=min(f[i,j],f[k,j-1]+abs(b[k]-b[i]));

end;

ans:=maxlongint;

for i:=n-m to n do

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

writeln(ans);

end.

NYOJ 208 貪心做法

題目鏈結nyoj 208 我原以為是取每個deadline的最大值。我還嘲笑為甚難度是4 結果直接wa。冷靜下來之後讀題,發現只要在deadline之前賣出去就行。所以正確的貪心策略是先從最值錢的貨物開始售賣,如果當前的貨物所在deadline已經 了東西,那就在1 deadline之間查詢哪天能賣...

208 實現Trie 字首樹

實現乙個 trie 字首樹 包含 insert,search,和 startswith 這三個操作。示例 trie trie new trie 說明 你可以假設所有的輸入都是由小寫字母 a z 構成的。保證所有輸入均為非空字串。class trie def init self self.root d...

208面試題 網路

79.http 響應碼 301 和 302 代表的是什麼?有什麼區別?301 moved permanently 被請求的資源已永久移動到新位置,並且將來任何對此資源的引用都應該使用本響應返回的若干個 uri 之一。如果可能,擁有鏈結編輯功能的客戶端應當自動把請求的位址修改為從伺服器反饋回來的位址。...