zjut 1688 I love you

http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1668

/*
位运算
给出n个数字 问最少需要几个数字使这些数字和为m
*/
#include<iostream>
#include<cstring>
using namespace std;
int m,n,ans;
const int INF=100000000;
int a[101];
void i_love_you(int k)
{
    int sum=0,num=0;;
	for(int i=0;i<n;i++)
	{
		if(k&(1<<i)){sum+=a[i];num++;}
	}
	if(sum==m&&num<ans)ans=num;
}
int main()
{
	int cas;
	cin>>cas;
	while(cas--)
	{
		ans=INF;
		cin>>m>>n;
		for(int i=0;i<n;i++)
			cin>>a[i];
		for(int i=1;i<(1<<n);i++)
		{
		     i_love_you(i);
		}
		if(ans==INF)cout<<-1<<endl;
		else cout<<ans<<endl;
	}
}
原文地址:https://www.cnblogs.com/sook/p/2037310.html