货币系统

#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 110,M=25010;
int n,m;
int a[N];//货币
bool f[M];//dp
int cnt;//取了多少个
int T;
int main(){
    cin>>T;
    while(T--){
        cnt=0;
        memset(f,0,sizeof f);
        f[0]=1;
        cin>>n;
        for(int i=1;i<=n;i++)cin>>a[i];
        sort(a+1,a+n+1);//排序后从小往大取
        for(int i=0;i<n;i++){
            for(int j=a[i];j<=25005;j++)//j从a[i]到最大
              f[j]|=f[j-a[i]];//核心式子
            if(!f[a[i+1]])cnt++;   
        }
        cout<<cnt<<endl;
    }
}