小貓爬山 列舉法

2021-08-28 12:10:06 字數 1238 閱讀 9946

problem description

freda和rainbow飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了(嗚咕》_<)。

freda和rainbow只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分別是c1、c2……cn。當然,每輛纜車上的小貓的重量之和不能超過w。每租用一輛纜車,freda和rainbow就要付1美元,所以他們想知道,最少需要付多少美元才能把這n只小貓都運送下山?

input

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

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

output

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

sample input

5 199612

1994

1229

sample output

2tip

對於 100%的資料,1≤n≤18,1≤ci≤w≤108

觀察本題,我們可能會想到動態規劃之類的辦法,但認真考慮,卻發現可行性不高。

因為這道題應當是乙個簡單的貪心思路,找出一組貓,它們的重量低於w且比其他符合條件的組合的重量更大。

所以,我們知道n≤18,那麼我們就直接列舉所有的情況,一次查詢的複雜度只有o(218(262144)),所以我們可以直接打出如下**。

不過,在**中,為了處理起來方便,我將列舉小貓轉化成尋找路徑,通過乙個深度優先搜尋的演算法來達到列舉的目的。並且,我對小貓體重進行排序,這樣對於相同的體重的組合,如果有更重的小貓,那麼更重的小貓的組合會被選擇送上纜車,來保證演算法的正確性。

#include using namespace std;

int n,w,tot,ans,qt,tail;

int q[19],d[19],c[19],h[19],bo[19];

struct edge

}e;

inline int read()

void qsort(int ,int );

void dfs(int );

int main()

return ;}

void qsort(int l,int r)

}if (lqsort(l,b);

if (aqsort(a,r);

return ;

}

小貓爬山(dfs)

時間限制 1 sec 記憶體限制 128 mb 題目描述 freda和rainbow飼養了n只小貓,這天,小貓們要去爬山。經歷了千辛萬苦,小貓們終於爬上了山頂,但是疲倦的它們再也不想徒步走下山了 嗚咕 freda和rainbow只好花錢讓它們坐索道下山。索道上的纜車最大承重量為w,而n只小貓的重量分...

小貓爬山(搜尋)

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

AcWing 小貓爬山

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