首页 > 其他 > 详细

luogu_1441 砝码称重

时间:2018-10-12 20:10:14      阅读:131      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
using namespace std;
int n,m,a[30],ans;
bool use[30],t[2010];

void dfs(int now,int cnt){
	if(now==m){
		memset(t,0,sizeof(t));
		int sum=0,tot=0; t[0]=1;
		for(int i=1;i<=n;i++)if(!use[i]){
			for(int j=tot;j>=0;j--)if(t[j] && !t[j+a[i]])t[j+a[i]]=1,sum++;
			tot+=a[i];
		}
		ans=max(ans,sum);
		return;
	}
	for(int i=cnt+1;i<=n;i++)if(!use[i]){
		use[i]=1;
		dfs(now+1,i);
		use[i]=0;
	}
}

int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	dfs(0,0);
	printf("%d\n",ans);
	return 0;
}

  

luogu_1441 砝码称重

原文:https://www.cnblogs.com/codetogether/p/9780284.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!