
直觉上B集合是A集合的非空子集,也就是说可以从A中舍弃一些元素,这些元素能被其他元素表示
就转化成了多重背包问题
#include<bits/stdc++.h>
using namespace std;
#define fr first
#define se second
typedef pair<int, int> PII;
typedef long long LL;
typedef unsigned long long ULL;
const int INF = 0X3f3f3f3f, N = 100 + 10, M = 2e5 + 10, MOD = 1e9 + 10;
int w[N];
void work() {
int n;
cin>>n;
for(int i=1;i<=n;i++) cin>>w[i];
sort(w+1,w+n+1);
int res=0;
vector<int> f(w[n]+1);
f[0]=1;
for(int i=1;i<=n;i++){
if(f[w[i]]) continue;
// for(int j=1;j<i;j++) 1
for(int k=w[i];k<=w[n];k++)
f[k]+=f[k-w[i]];
res++;
}
cout<<res<<endl;
}
signed main() {
int test;
cin>>test;
while(test--){
work();
}
return 0;
}