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; } }