leetcode 連線棒材的最低費用

2021-10-03 12:41:28 字數 972 閱讀 8507

題目描述:

為了裝修新房,你需要加工一些長度為正整數的棒材 sticks。

如果要將長度分別為 x 和 y 的兩根棒材連線在一起,你需要支付 x + y 的費用。 由於施工需要,你必須將所有棒材連線成一根。

返回你把所有棒材 sticks 連成一根所需要的最低費用。注意你可以任意選擇棒材連線的順序。

反思:注意點一:一定要確保所有邏輯和處理時正確的,有乙個地方沒注意到,導致浪費很多點去定位,一定一定要注意主要邏輯一定要清晰,邏輯處理一定要正確。

注意點二:這裡有個用例沒考慮到就是只有乙個元素,其餘特殊用例倒是沒有了。

解題思路:肯定是最小的開始連最後總和越少,因為每次拼接其實就是乙個重複加的過程,把小的重複加總比大的划算。

另外就是怎麼把最小的加起來:第乙個想法就是排序,使用qsort函式,但是把最小的加完後,陣列的個數會發生變化,那怎麼辦呢。因此就使用乙個佇列,為何使用佇列,因為最先加起來的數肯定最小。因此先入佇列的就最先加,把佇列頭和陣列要加的數比較,誰小加誰。把加好的數入佇列。

int incom(const void *a, const void *b)

int connectsticks(int* sticks, int stickssize)

qsort(sticks, stickssize, sizeof(int), incom);

stack[stackpointtail++] = sticks[0] + sticks[1];

result += stack[stackpointhead];

stickpoint = 2;

while ((stackpointhead != (stackpointtail - 1)) || (stickpoint <= (stickssize - 1))) else

} else else

} else

}}return result;

}

1167 連線棒材的最低費用

為了裝修新房,你需要加工一些長度為正整數的棒材 sticks。如果要將長度分別為 x 和 y 的兩根棒材連線在一起,你需要支付 x y 的費用。由於施工需要,你必須將所有棒材連線成一根。返回你把所有棒材 sticks 連成一根所需要的最低費用。注意你可以任意選擇棒材連線的順序。示例 1 輸入 sti...

LeetCode 1335 工作計畫的最低難度

oj 題意 給定一組工作序列的難度,給定天數。完成第i個工作的時候,必須要先完成 0,i 1 的工作,每天的工作難度是這一天完成的工作中難度最大的那乙個,每天的難度之和為完成這組工作難度的總和,每天都必須要有工作。題解 典型的動態規劃的題目,用dp i j 來表示i天一共完成j個任務的最小難度。關係...

LeetCode 1335 工作計畫的最低難度

動態規劃的本質是列舉,拆分成乙個乙個狀態,每個狀態只和一些狀態相關,由這些狀態轉移。每乙個狀態已經記錄了這個狀態的最優值,每乙個狀態從前面的相關最優狀態轉移過來,選擇最優值。初始狀態需要初始化,根據問題來初始。dp 位置 段數 段數是已分段的數量,因為最後要分成d段,所以需要記錄這個狀態。初始化這裡...