题面
思路
先分析一下,a集合的子集肯定不存在可以用它来表示的数,a集合是不能够表示的。
所以问题简化了成为选出a的一个子集(个数最少),能够表达a集合所有能表达的数。
接下来继续分析
如:1 2 4
1没有两集合内数可以表达,留下
2=1+1 所以2删去
3=2+1 所以1删去,3可以被表达(可当做集合内数)
4=1+3 所以4删去
只剩1了,就输出1。
代码
// luogu-judger-enable-o2 #include<bits/stdc++.h> using namespace std; ],a[]; int main() { scanf("%d",&T); while (T--) { memset(tag,,sizeof(tag)); scanf("%d",&n); ;i<=n;i++) { scanf("%d",&a[i]); tag[a[i]]=-; } sort(a+,a+n+); ;i<=a[n];i++) { ) { ;j<=n;j++) { ; } } } ; ;i<=n;i++) ) ans++; cout<<ans<<endl; } ; }