5664 放置盒子

2021-10-17 11:16:15 字數 1525 閱讀 7134

5664. 放置盒子

有乙個立方體房間,其長度、寬度和高度都等於 n 個單位。請你在房間裡放置 n 個盒子,每個盒子都是乙個單位邊長的立方體。放置規則如下:

你可以把盒子放在地板上的任何地方。

如果盒子 x 需要放置在盒子 y 的頂部,那麼盒子 y 豎直的四個側面都 必須 與另乙個盒子或牆相鄰。

給你乙個整數 n ,返回接觸地面的盒子的 最少 可能數量。

示例 1:

輸入:n = 3

輸出:3

解釋:上圖是 3 個盒子的擺放位置。

這些盒子放在房間的一角,對應左側位置。

示例 2:

輸入:n = 4

輸出:3

解釋:上圖是 3 個盒子的擺放位置。

這些盒子放在房間的一角,對應左側位置。

示例 3:

輸入:n = 10

輸出:6

解釋:上圖是 10 個盒子的擺放位置。

這些盒子放在房間的一角,對應後方位置。

1 <= n <= 10e9

基本思路:首先,為了地面單元格盡量少,我們應該靠在乙個角落堆積單元格,以使頂部可以放盡量多的單元格。我們可以先寫出幾個例子,容易發現,每層的單元格的個數為(i+1)*i/2;假設有k層,且每一層都填滿,那麼從底部往上,每一層的單元格的個數是,(k+1)*k/2,(k-1)*k)/2,...(1+1)*1/2,據此,我們可以找到對於數字n,滿足條件的大於k層,但是小於k+1層的模型

舉個例子:以第一層的單元格為3為例開始,逐漸增加單元格的情況,其中,每個單元格上的數字,代表層數(該位置上單元格的最多個數)

1 1     ->  1 1    ->1  1   -> 3 2 1

1             1           2  1      2 1

1           1          1

對比上圖,我們可以發現, 從下往上,底部每新增乙個單元格時,頂部可以新增的單元格數目從0->k-1個。

int minimumboxes(int n) 

level--;

int area=(level+1)*level/2;

int add=0;

while(cell

return area;

}

C new的放置語法

include using namespace std struct node int u node int uu 0 u uu cout create endl node u 1000 cout delete n int main node mem 100 node p mem node q ne...

正確放置inline函式

個人感覺用c 寫出的程式再小也小不到 去,不愧是開發大型專案的好手,呵呵。所以用c 寫出的程式一定要有個好的布局,也就是合理的標頭檔案原始檔設定 這是高手說的,哈哈 前幾天,自己在折騰c 的時候遇到了乙個及其鬱悶的事情 程式寫好了,編譯也通過了,可就是鏈結的時候總報找不到那個函式。整整折騰了我一下午...

資料放置的位置

bbs段 未初始化的全域性變數 int g bss 1024 這個大小沒有反應在最後exe的大小上,它只佔執行記憶體空間,不占用檔案空間。data段 初始化過的全域性變數 rodata段 常量資料 的rodata直接和指令編碼一起,故存放在 段中 字串常量,編譯器會自動刪除重複的字串,保證在exe只...