迭代加深 索道

2021-08-25 19:27:44 字數 810 閱讀 2721

這天,tom帶一群小朋友們去爬山。經歷了千辛萬苦,小朋友們終於爬上了山頂,但是疲倦的他們再也不想徒步走下山了。

tom只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n個小朋友的重量分別是c1、c2……cn。當然,每輛纜車上的小朋友的重量之和不能超過w。

每租用一輛纜車,tom就要付1美元,所以他想知道,最少需要付多少美元才能把這n個小朋友都運送下山?(不包括tom)

第一行包含兩個用空格隔開的整數,n和w。

接下來n行每行乙個整數,其中第i+1行的整數表示第i個小朋友的重量ci。

輸出乙個整數,最少需要多少美元,也就是最少需要多少輛纜車。

5 199612

1994

1229

輸出樣例:

2
【資料範圍】

對於100%的資料,1≤n≤18;1≤ci≤w≤10^8。

解析:迭代加深搜尋。最好按照從大到小排序優化搜尋順序。

**:

#include using namespace std;

const int max=20;

int n,m,ans,sum,flag;

int num[max],sum[max];

inline bool comp(const int &a,const int &b)

inline void dfs(int pos,int limit)

for(int i=1;i<=limit;i++)

}int main()

}return 0;

}

迭代加深搜尋

深度優先搜尋每次選定乙個分支,然後往下搜尋,直到遞迴邊界 才回溯。這種策略有一點缺陷,那就是當搜尋樹的分支數目特別 多,並且答案在某個較淺的節點上,如果dfs在一開始就選錯了分 支,那就會在沒有答案的深層次浪費時間 當搜尋樹規模隨著層次的深入增長很快,並且能 夠確保答案在乙個較淺的節點上時,就可以使...

迭代加深搜搜尋

對於可以用回溯法求解但解答樹的深度沒有明顯上限的題目,可以考慮使用迭代加深搜尋。經典問題 埃及分數問題 給出乙個分數,比如19 45,把它寫成若干個形如1 ri的分數的和的形式,比如19 45 1 5 1 6 1 18,要求分母不能重複使用並且使用的分數的個數最少。如果有多組個數相同的解,最後的分數...

迭代加深dfs優化

當普通dfs搜尋答案時,有時會有搜尋的深度較深狀態較多,而答案所在的深度卻比較小的情況。比如說下面這個圖中,目標狀態是紅框的那個點,它的深度很小,但是左側有很多的狀態,普通dfs必須要搜完左側所有狀態才會搜到目標狀態,這樣就很容易超時。對此可以在dfs的時候限定乙個深度的狀態,這個深度是從小到大列舉...