比赛 快乐小组互测赛2019-09-27 评测结果 WTTTTTTTTTAAAAAAAAAA
题目名称 小猫爬山 最终得分 50
用户昵称 Moonler 运行时间 9.005 s
代码语言 C++ 内存使用 13.66 MiB
提交时间 2019-11-13 18:36:10
显示代码纯文本
    #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+1) return 1;
    	for (i=1;i<=mid;i++){
    		if (f[i]+a[x+1]<=t){
    			f[i]+=a[x+1];
    			dfs(x+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(1))r=mid;
    		else l=mid+1;
    	}
    	cout<<mid<<endl;
    	return(0);
    }