拯救少林神棍

2021-09-20 10:30:50 字數 1827 閱讀 9380

題意很簡單就是有多跟木棍要拼成長度相等的的木棍,使得長度最小,輸出可以拼成的木棒數量。

一看就是深搜的題目,但是直接暴力搜尋會超時,自己寫了好久也沒過,早就聽說這道題是神剪枝,用了好多剪枝,自己看了好久終於懂了。

首先找到長度最大的木棒,判斷是否可以被總長度整除,不可以就+1,直到可以被總長度整除,暫時把這個長度作為目標長度進行深搜,到全部搜完得不到答案再求下乙個可以被總長度整除的數,以此類推進行搜尋。

越長的木棍對後面木棍的約束力越大,因此要把小木棍排序,按木棍長度從大到小搜尋,這樣就能在盡可能靠近根的地方剪枝。

(剪枝一)

如果當前木棍能恰好填滿一根原始木棍,但因剩餘的木棍無法組合出合法解而返回,那麼讓我們考慮接下來的兩種策略,一是用更長的木棍來代替當前木棍,顯然這樣總長度會超過原始木棍的長度,違法。二是用更短的木棍組合來代替這根木棍,他們的總長恰好是當前木棍的長度,但是由於這些替代木棍在後面的搜尋中無法得到合法解,當前木棍也不可能替代這些木棍組合出合法解。因為當前木棍的做的事這些替代木棍也能做到。所以,當出現加上某根木棍恰好能填滿一根原始木棍,但由在後面的搜尋中失敗了,就不必考慮其他木棍了,直接退出當前的列舉。(剪枝二)

顯然最後一根木棍是不必搜尋的,因為原始木棍長度是總木棍長度的約數。(算不上剪枝)

考慮每根原始木棍的第一根木棍,如果當前列舉的木棍長度無法得出合法解,就不必考慮下一根木棍了,當前木棍一定是作為某根原始木棍的第一根木棍的,現在不行,以後也不可能得出合法解。也就是說每根原始木棍的第一根小木棍一定要成功,否則就返回。(剪枝四)

剩下乙個通用的剪枝就是跳過重複長度的木棍,當前木棍跟它後面木棍的無法得出合法解,後面跟它一樣長度的木棍也不可能得到合法解,因為後面相同長度木棍能做到的,前面這根木棍也能做到。(剪枝五)

神剪枝**:

#include #include #include #include #include using namespace std;

vectorlen(65);

int vis[65];//木棒是否已使用過

int l;

int n;

/**剩餘rest根木棒時,當前棍子還差期望長度l的值為needlen時是否有搜尋結果

*/bool dfs(int rest,int needlen,int lastindex)

if(needlen==0)

//一根拼完拼新的一根,直到rest為0。

//剪枝4:多根木棒組成一根木棍,讓木棒按長度由大到小排列組成,

//不必搜尋當前木棒比上一根木棒長的情況,因為如果此種情況可以的話,只是相當於將組成情況不按長度大小排序,

//不按長度大小排序可成功那麼按長度大小排序也可成功。

int startinex=needlen==l?0:lastindex+1;

for(int i=startinex;i0&&!vis[i-1]&&len[i-1]==len[i])

//剪枝1:上次沒拼成功,這次不嘗試相同長度的木棒。

if(!vis[i]&&len[i]<=needlen)

else}}

}return false;

}int main()

sort(len.begin(),len.end(),greater());//保持棒子長度由大到小

for(l=len[0];l<=totallen/2;l++)

memset(vis,0,sizeof(vis));

if(dfs(n,l,-1))

}if(l>totallen/2) //減少一層複雜度。

//搜尋不到組成2根及2根以上棍子的方法,則所有木棒只能組成一根棍子。

cout<}

return 0;

}

vc 少林72般絕技

vc是許許多多技術的綜合,就好象少林72般絕技,一般在應用中學會其中很少一部分就夠了。我們的現在目的,其實不過是學一套少林長拳。這套長拳應包括 1 養成一種嚴謹的軟體開發習慣,熟悉軟體工程的基本原則。2 c語言基礎 3 c 最基本內容 類 繼承性 封裝性 多型性的概念 4 如何用嚮導建立乙個程式框架...

禪心武意寫就《少林傳奇》

1月11日,本報記者應邀參加了緯創資通子公司玩酷科技舉辦的 座談會。會上,玩酷科技總經理張鳳珠親自介紹了他們歷時兩年開發的武俠3d mmorpg作品 少林傳奇 的主要內容和遊戲特色。少林 品牌授權 資料顯示,通過我國台灣中影公司的牽線搭橋,玩酷科技從嵩山少林寺方丈手中取得了包括 少林傳奇 在類的電子...

少林寺的組織結構分析

天龍八部 裡面講過枯榮老和尚一把火燒掉了 六脈神劍 劍譜的事情。之前天龍寺的幾個高僧討論過要不要用劍譜和鳩摩智交換少林72絕技,枯榮老和尚說我們自己的一陽指習練下去永無止境,何必要眼紅別個的武學?於是給否決了。相比之下,少林寺的態度大不一樣。記不住是 天龍八部 還是 倚天屠龍 裡面寫的,少林 行走江...