CH 2201 小貓爬山 高階指南,搜尋

2021-10-06 08:23:26 字數 1151 閱讀 2618

1、 用乙個陣列,cab[maxn], 記錄每一輛車上所有貓的重量;

void dfs(int now, int cnt) //now 表示當前已經有多少只貓上車,車的數量是 cnt;

cab[i] += cat[now]; //選擇某一輛車 cab[i] 輛裝當前貓 cat[now]

dfs(now + 1, cnt); //遞迴

cab[i] -= cat[now]; //遞迴出來,車 cab[i] 輛不裝當前貓 cat[now]

2、 先排序,從大到小,優先安排重量大的貓上車;

3、 對於cnt >= ans 時候,就沒有必要進行了。

#include

#include

#include

#include

using

namespace std;

const

int maxn =20;

int cat[maxn]

;int cab[maxn]

;// 記錄每一輛車上所有貓的重量

int n, w;

int ans =

0x3f3f3f3f

;bool

cmp(

int a,

int b)

void

dfs(

int now,

int cnt)

//now 表示當前已經有多少只貓上車,車的數量是 cnt

if(now == n +1)

// 在 1 ~ cnt 輛纜車選擇一輛來放 cat[now]

for(

int i =

1; i <= cnt;

++i)

}// 增加一輛新車來放 cat[now]

cab[cnt +1]

= cat[now]

;dfs

(now +

1, cnt +1)

; cab[cnt +1]

=0;}

void

solve()

intmain()

solve()

;return0;

}/*5 199612

1994

1229

*//*

2*/

CH2201 小貓爬山

一道很基礎的深搜題,資料範圍不大,稍加剪枝即可通過。將重量降序排列,對於已經選了的車,嘗試當前的貓能不能坐,如果全部嘗試失敗,則另用一輛車。1 include 2 include 3 include 4 typedef long long ll 5 inline int read 9while c ...

CH2201 小貓爬山 DFS

設狀態為 no w,cn t now,cnt now,c nt now nowno w 表示當前要分配第幾隻貓,cnt cntcn t 表示已經租用了多少輛纜車 同時記錄下每輛纜車的重量情況,dfs即可。當前 cnt cntcn t 若大於等於已求的答案,直接返回 按重量給貓排序,先放重量大的。in...

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

翰翰和達達飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 翰翰和達達只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1 c2 cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一輛纜車,翰翰和達...