小明带了
N 个小朋友爬山游玩。游玩了一天,现在小朋友们需要从山顶上下山,但是非常累都不想动了。小明只好花钱让小朋友们通过缆车方式坐车下山。索道上的缆车最大承重量为
W,而 N 个小朋友的体重分别是 C 1,C 2,…,C N。
当然,每辆缆车上的小朋友的重量之和不能超过
W。每租用一辆缆车,小明就要付 1美元,所以他们想知道,最少需要付多少美元才能把这
N 个小朋友都运送下山?
输入样例:
5 1996
1
2
1994
12
29
输出样例:
2
代码爆1了
#include<bits/stdc++.h>
using namespace std;
int n,m,c[1000],ans,p[1000];
bool dfs(int x,int tot)
{
if(x>tot) return true;
for(int i=1;i<=x&&i<=tot;i++)
{
if(p[i]+c[i]<=m)
{
p[i]+=c[i];
bool q=dfs(x+1,tot);
p[i]-=c[i];
if(q) return true;
}
}
return false;
}
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>c[i];
for(int i=1;i<=n;i++)
{
if(dfs(1,i))
{
cout<<i;
return 0;
}
}
return 0;
}