读完题目之后,内心一片祥和,除了想口吐芬芳........
题意:给定n个数,然后问最后剩余多少个数的时候,还可以把原来的数全部表示出来
举个例子:3 10 19 ,最后剩下2个数3和10即可,因为19=3+3+3+10
题解看一波范围,额,有点小.....最多才图片说明
那还想啥,直接暴力
比如3 可以构成3 6 9 12 15......
然后10可以构成10 20 30 40......
然后3和10结合可以构成13 16 19 22 25.....23 26 29 32 35......33.....
然后19,可以由前面比较小的两个数构成,n--
先排下序,然后对于然后判断当前数字是否可以由比他小的前面的数构成,如果当前的数在输入的n个数中,且可以由比其小的数构成n--

#include<bits/stdc++.h>
using namespace std;
int n,a[101],ans;
bool f[25001];
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        memset(f,0,sizeof(f));
        scanf("%d",&n);
        ans=n;
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        sort(a+1,a+n+1);
        f[0]=1;
        for(int i=1;i<=n;i++)
        {
            if(f[a[i]]){ans--;continue;}
            for(int j=a[i];j<=a[n];j++)f[j]|=f[j-a[i]];
        }
        printf("%d\n",ans);
    }
}