P1504 積木城堡(洛谷)

2021-07-26 18:43:29 字數 1434 閱讀 8816

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

小xc想把自己壘的城堡送給幼兒園裡漂亮的女孩子們,這樣可以增加他的好感度。為了公平起見,他決定把送給每個女孩子一樣高的城堡,這樣可以避免女孩子們為了獲得更漂亮的城堡而引起爭執。可是他發現自己在壘城堡的時候並沒有預先考慮到這一點。所以他現在要改造城堡。由於他沒有多餘的積木了,他靈機一動,想出了乙個巧妙的改造方案。他決定從每乙個城堡中挪去一些積木,使得最終每座城堡都一樣高。為了使他的城堡更雄偉,他覺得應該使最後的城堡都盡可能的高。

任務:請你幫助小xc編乙個程式,根據他壘的所有城堡的資訊,決定應該移去哪些積木才能獲得最佳的效果。

輸入格式:

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

輸出格式:

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

輸入樣例#1:

2

2 1 –1

3 2 1 –1

輸出樣例#1:

3
**:

有點小難度,網上的題解:

看了一下下面一堆p的題解 來一發c++的

裝箱問題公升級版

每次讀入一組積木 就做一遍裝箱 然後如果某個高度能達到 就在陣列裡對應的位置加1

做n遍揹包以後 從最大高度開始倒序列舉 如果列舉到乙個高度 能達到的積木組數是n的話 直接輸出結束

最後別忘了輸出0(在第八個點上被卡了 一直提示too many or too few lines)

不記錄最大高度的話倒序列舉的時候就從10000開始列舉 不過能節省的效率還是節省吧 這麼暴力的方式

#include#includeusing namespace std;

int high[10005],v[10005],n,ni,sum,maxsum,a[10005];

int main()

ni--;

sum++;

if(sum>maxsum)

maxsum=sum;

for(int j=1;j<=sum;j++)

v[j]=0;

v[0]=1;

for(int j=1;j<=ni;j++)

for(int k=sum;k>=a[j];k--)

if(!v[k]&&v[k-a[j]])

}for(int i=maxsum;i>=1;i--)

if(high[i]==n)

printf("0");

}

洛谷 積木城堡

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

洛谷 P1457 城堡

給定一張圖,要求輸出聯通塊個數,最大聯通塊,刪除一堵牆後最大聯通塊以及刪除的牆的位置 輸入中每乙個單位的數字告訴我們這個單位的東西南北是否有牆存在。每個數字是由以下四個整數的某個或某幾個或乙個都沒有加起來的。1 在西面有牆 2 在北面有牆 4 在東面有牆 8 在南面有牆 二進位制處理一下之後連邊,直...

洛谷 P1969 積木大賽

題目描述 春春幼兒園舉辦了一年一度的 積木大賽 今年比賽的內容是搭建一座寬度為n的大廈,大廈可以看成由n塊寬度為1的積木組成,第i塊積木的最終高度需要是hi。在搭建開始之前,沒有任何積木 可以看成n塊高度為 0 的積木 接下來每次操作,小朋友們可以選擇一段連續區間 l,r 然後將第第 l 塊到第 r...