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;
}
}
浙公网安备 33010602011771号