動態規劃 積木城堡

2021-06-10 13:01:37 字數 1659 閱讀 2277

var i,j,n,tot,x,max:longint;

f,g:array[-1..101,-1..10000]of boolean;

v:array[1..150]of longint;

flag:boolean;

procedure work(k:longint);

var i,j,sum:longint;

begin

fillchar(f,sizeof(f),false);

sum:=0;

for i:=1 to tot do sum:=sum+v[i];

if max=0 then f[i,j]:=(f[i-1,j-v[i]])or(f[i-1,j])

else f[i,j]:=f[i-1,j];

end;

for j:=1 to sum do if f[tot,j] then g[k,j]:=true;

end;

begin

fillchar(g,sizeof(g),false);

readln(n);max:=0;

for i:=1 to n do

begin

tot:=0;

for j:=1 to 150 do

begin

read(v[j]);

if v[j]=-1 then begin

tot:=j-1;

break;

end;

end;

work(i);

end;

for i:=max downto 0 do

begin

flag:=true;

for j:=1 to n do

if g[j,i]=false then

begin

flag:=false;

break;

end;

if flag then begin

writeln(i);break;end;

end;

if flag=false then writeln(0);

readln;readln;

end.

from

ycglovewxx

積木城堡 

描述 description

輸入格式 input format

第一行是乙個整數n(n<=100),表示一共有幾座城堡。以下n行每行是一系列非負整數,用乙個空格分隔,按從下往上的順序依次給出一座城堡中所有積木的稜長。用-1結束。一座城堡中的積木不超過100塊,每塊積木的稜長不超過100。

輸出格式 output format

乙個整數,表示最後城堡的最大可能的高度。如果找不到合適的方案,則輸出0。

樣例輸入 sample input

樣例輸出 sample output

注釋 hint

原資料有誤,不知我修正後是不是對?

** source

nlogn年之前浙江省隊選拔第x輪

暴力dp;

對於每乙個城堡,用01揹包判斷 能不能構成高度k

最後從高到低判斷每乙個高度,是否所有城堡都能構成,可以則輸出。

如果都不可以就輸出0

注意陣列大小開100會掛= = 因為還有個-1。。。。

vijos 積木城堡

恰似今天更了七章 我該怎麼辦 看上去好像只能瘋狂寫揹包啦 他們說周四化學通練,我好慌 描述 第一行是乙個整數n n 100 表示一共有幾座城堡。以下n行每行是一系列非負整數,用乙個空格分隔,按從下往上的順序依次給出一座城堡中所有積木的稜長。用 1結束。一座城堡中的積木不超過100塊,每塊積木的稜長不...

積木城堡 dp

xc的兒子小xc最喜歡玩的遊戲用積木壘漂亮的城堡。城堡是用一些立方體的積木壘成的,城堡的每一層是一塊積木。小xc是乙個比他爸爸xc還聰明的孩子,他發現壘城堡的時候,如果下面的積木比上面的積木大,那麼城堡便不容易倒。所以他在壘城堡的時候總是遵循這樣的規則。小xc想把自己壘的城堡送給幼兒園裡漂亮的女孩子...

積木城堡 dp

xc的兒子小xc最喜歡玩的遊戲用積木壘漂亮的城堡。城堡是用一些立方體的積木壘成的,城堡的每一層是一塊積木。小xc是乙個比他爸爸xc還聰明的孩子,他發現壘城堡的時候,如果下面的積木比上面的積木大,那麼城堡便不容易倒。所以他在壘城堡的時候總是遵循這樣的規則。小xc想把自己壘的城堡送給幼兒園裡漂亮的女孩子...