比赛 快乐小组互测赛2019-09-27 评测结果 AAAAAAAAAAAAAAAAAAAA
题目名称 小猫爬山 最终得分 100
用户昵称 leon 运行时间 0.016 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-09-27 21:08:53
显示代码纯文本
    #include <iostream>
    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int n,t,mid,a[20],f[20];
    bool ok;
    int dfs(int x){
    	int i;
    	if (x==n){return 1;}
    	for (i=1;i<=mid;i++){
    		if (f[i]+a[x+1]<=t){
    			f[i]+=a[x+1];
    			if (dfs(x+1))
    				return 1;
    			f[i]-=a[x+1];
    		}
    	}
    	return 0;
    }
     
    int main(){
    	freopen("koneko.in","r",stdin);
    	freopen("koneko.out","w",stdout);
    	int i,s=0,l,r;
    	cin>>n>>t;
    	for(i=1;i<=n;i++){
    		cin>>a[i];
    		s+=a[i];
    	}
    if (s%t)
		l=s/t+1;
	else
		l=s/t;
    	r=n;
    	while(l<=r){    		
		mid=(l+r)>>1;
    		ok=false;
    		memset(f,0,sizeof(f));
    		if(dfs(0))r=mid-1;
    		else l=mid+1;
    	}
    	cout<<mid<<endl;
    	return(0);
    }