小猫爬山

匿名 (未验证) 提交于 2019-12-02 23:52:01

AcWing

//#include<bits/stdc++.h> #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> using namespace std; inline int read(){     int x=0,o=1;char ch=getchar();     while(ch!='-'&&(ch<'0'||ch>'9'))ch=getchar();     if(ch=='-')o=-1,ch=getchar();     while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();     return x*o; } int n,m,ans,a[20],b[20]; inline void dfs(int now,int cnt){     if(cnt>=ans)return;     if(now==n+1){ans=min(ans,cnt);return;}     for(int i=1;i<=cnt;++i){         if(a[now]+b[i]<=m){             b[i]+=a[now];             dfs(now+1,cnt);             b[i]-=a[now];         }     }     b[cnt+1]=a[now];     dfs(now+1,cnt+1);     b[cnt+1]-=a[now]; } int main(){     n=read(),m=read();     for(int i=1;i<=n;++i)a[i]=read();     sort(a+1,a+n+1);reverse(a+1,a+n+1);     ans=n;dfs(1,0);     printf("%d\n",ans);     return 0; } 
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!