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。每租用一輛纜車,翰翰和達...