相信大家都学过01背包、完全背包吧....
可惜....在这里是多重背包!!!!!
/***
首先我们分类一下qwq
这是一个多重背包问题qwq
求最少硬币个数,所以得用min,不是max哦~
上代码!!!(废话)
***
/

#include<bits/stdc++.h>
using namespace std;
int t,m,a,b,c;
int q[4],s[4];
int f[105];
//j表示背包容量 
int main(){
    cin>>t;//有几组数据呢??? 
    q[1]=10;q[2]=5;q[3]=1;//分别代表10元,5元,1元$$$$$$钱好多呀\(^o^)/~ 
    while(t--){
        cin>>m>>s[3]>>s[2]>>s[1];//输入巧克力价格、钱币持有数量 
        for(int i=1;i<=m;i++) {
            f[i]=101;//默认101 
        }
        for(int i=1;i<=3;i++){//循环....没什么好稀奇的
            for(int j=m;j>=0;j--)//循环....没什么好稀奇的
              for(int k=0;k<=s[i]&&k*q[i]<=j;k++)//循环....没什么好稀奇的 
                  f[j]=min(f[j],f[j-k*q[i]]+k);//啊!这是最小!应该没有掉进坑:D 

        }
        if(f[m]==101) cout<<"-1"<<endl;//若f[m]为初始值....那就别买了:) 
        else cout<<f[m]<<endl;
    }
    return 0;
}