《演算法競賽高階指南》0x22dfs 小貓爬山

2022-05-20 11:12:36 字數 677 閱讀 4631

首先看到這個資料範圍就知道需要用搜尋來實現,儲存的當前狀態是一共用了多少纜車,當前掃瞄的小貓編號 ,每個纜車中的重量。其中第三個狀態是可以用全域性陣列來維護的,

前面兩個狀態作為dfs的引數傳入,每次可以產生cnt+1個分支,cnt為纜車數量。優先排重量比較大的,因為在搜尋樹的深處大的重量更難搜尋到最優狀態,搜尋樹的規模將會變得

十分龐大。

**如下:

#include#include

using

namespace

std;

#define maxn 25

intcab[maxn],w[maxn];

intn,weight;

int ans=0x7f

;void dfs(int now,int

cnt)

for(int i=0;i)

}cab[cnt]=w[now];//

重新使用乙個纜車

dfs(now+1,cnt+1

); cab[cnt+1]=0;}

bool cmp(int &a,int &b)

intmain()

sort(w,w+n,cmp);//

按照weight進行降序排序,優先排比較大的

dfs(0,0

); cout

}

演算法競賽高階指南 0x00

快速冪模板,寫一下快速冪的原理。我們知道,乙個數 n 在二進位制 也可以是其他進製 下可以被表示為 a 1 a 2 2 1 a 3 2 2 a m 2 那麼我們可以考慮將其分拆成二進位制狀態下的每一位,然後做冪運算。這樣做的時間複雜度為 o log 2 n 實現的過程類似於倒過來的分治 當然也可以直...

《演算法競賽高階指南》0x32約數

求解 1,n 之間的最大的反素數,有性質 這個反素數是質因數個數最多的數中最小的乙個。證明 假設有乙個數質因數個數比它多,如果在他前面,不滿足反素數的定義,如果在他後面,一定可以找到第乙個質因數比它大的數,這個數作為結果更好,反證可知,這個數質因數一定是最多的 反證 假設有質因數與他的個數一樣但是比...

演算法競賽高階指南 0x11 棧 Editor

通過觀察我們可以將這個序列通過2個棧和2個陣列來維護5種操作進而達到題解,為了方便,直接用陣列來模擬棧 stkl n 游標左邊的棧 stkr n 游標右邊的棧 tl 左棧指標 tr 右棧指標 s n 字首和陣列 f n 最大字首和 對於第乙個操作,在游標處插入x,就是給stkl 的棧頂插入乙個x,字...