c c 演算法刷題筆記 經典剪枝問題

2021-10-03 14:32:09 字數 842 閱讀 8032

題目描述

還記得童話《賣火柴的小女孩》嗎?現在,你知道小女孩有多少根火柴,請找出一種能使用所有火柴拼成乙個正方形的方法。不能折斷火柴,可以把火柴連線起來,並且每根火柴都要用到。

輸入為小女孩擁有火柴的數目,每根火柴用其長度表示。輸出即為是否能用所有的火柴拼成正方形。

樣例輸入: [1,1,2,2,2]

輸出: true

解釋: 能拼成乙個邊長為2的正方形,每邊兩根火柴。

輸入: [3,3,3,3,4]

輸出: false

解釋: 不能用所有火柴拼成乙個正方形。

注意:給定的火柴長度和在 0 到 10^9之間。

火柴陣列的長度不超過15。

筆記經典剪枝優化問題:

所有火柴拼成4條等長的邊: a=sum%4==0

依次構造正方形的每條邊:

從大到小列舉所有邊: 如 2 3 4 5 6 7

若剪 2:剪枝砍掉 3467 優先列舉分支少的,剪掉的更多

若剪 7:剪枝砍掉 2345

每條邊內部的木棒長度規定從大到小

當前木棒拼接失敗,跳過後面所有長度相同的木棒

如果當前木棒拼接失敗,且是當前邊的第乙個,則直接剪掉當前分支

如果當前木棒拼接失敗,且是當前邊的最後乙個,則直接剪掉當前分支

**

class

solution

bool

dfs(vector<

int>

& nums,

int count,

int cur,

int a)

}return

false;}

};

c c 演算法刷題筆記 洛谷闖關1 2

p1035 級數求和 p1423 小玉在游泳 p1424 小魚的航程 改進版 p1980 計數問題 前幾篇都是比較基礎的題目,仍然記錄的意義在於 把其他地方的零碎筆記騰上來 不要小看基礎,基礎和基礎加起來就會很牛批了哦 同時回顧以前的題目,看能不能瞬間捋清思路。題目描述 將1,2,9共9個數分成3組...

c c 演算法刷題筆記 自測模考 2018

前言 今天做了2018年的上機真題,雖簡單,但除第一題以外其他三題並不無腦。第二道被卡住超過半小時,主要原因 對 string 的操作還不夠熟悉,簡單認知,但不能熟練靈活利用。問題描述 近來,跳一跳這款小遊戲風靡全國,受到不少玩家的喜愛。簡化後的跳一跳規則如下 玩家每次從當前方塊跳到下乙個方塊,如果...

刷題 子集和問題的回溯剪枝解法

輸入給定整數集,問是否存在該整數集的子集,使得該子集元素的和為0。比如給定的整數集合為 7,3 2,5,8 存在集合的子集 3,2,5 該子集和為0。input 2 3 4 5 0output 1101 0000這裡不給出 如果有興趣可以去看一下 程老師 的書。傳統解法的思路是 直接窮舉出所有子集合...