题目
解题方法
贪心
-
用降序排序,能用则用?
-
贪心错误数据:
5 10
6
5
3
2
2
搜索
- 用dfs或bfs
- 搜索
代码
#include<bits/stdc++.h>
using namespace std;
int max(int a,int b){return a>b?a:b;}
int N,M,a[10039],w[10039];
int ans=1E5;
void dfs(int num,int cnt){
if(cnt>=ans)return;
if(num==N+1){
ans=min(ans,cnt);
return;
}
for(int i=1;i<=cnt;i++){
if(M-w[i]>=a[num]){
w[i]+=a[num];
dfs(num+1,cnt);
w[i]-=a[num];
}
}
w[cnt+1]=a[num];
dfs(num+1,cnt+1);
return;
}
int cmp(int a,int b){
return a>b;
}
int main(){
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++){
scanf("%d",&a[i]);
}
sort(a+1,a+1+N,cmp);
dfs(1,0);
printf("%d\n",ans);
return 0;
}