#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int q[N],car[N];
int n,w;
int res=1e9;

bool cmp(int a, int b) {
    return a > b;
}

void dfs(int u,int cnt){
    if(cnt>=res) return;
    if(u>n){
        res=min(res,cnt);
        return ;
    }
    for(int i=1;i<=cnt;i++){
        if(car[i]+q[u]<=w){
            car[i] += q[u];
            dfs(u+1,cnt);
            car[i] -= q[u];
        }
    }
    car[cnt+1]= q[u];
    dfs(u+1,cnt+1);
    car[cnt+1]=0;
}

int main(){
    scanf("%d%d",&n,&w);
    for(int i=1;i<=n;i++){
        scanf("%d",&q[i]);
    }
    sort(q+1,q+n+1,cmp);
    dfs(1,0);

    printf("%d",res);
    
}

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐