以前自己存的代码了,看标题也不能回忆起来是啥意思,居然没留下来是什么题。。。先放在这把
#include <iostream>
using namespace std;
int w[6] = {1,5,10,50,100},num[5],use[5];
bool dfs(int v,int x){
if (x < 0)
return false;
int n = v / w[x];
if (num[x] >= n){
num[x] -= n;
use[x] += n;
return true;
}
if (dfs(v - num[x]*w[x],x-1)){
use[x] += num[x];
num[x] = 0;
return true;
}
else
return false;
}
int main(){
int n,m;
cin >> n;
while (n--){
cin >> m;
for (int i = 0;i <= 4;i++)
cin >> num[i];
int x = m,ans1 = 0,ans2 = 0;
for (int i = 4;i >= 0;i--){
use[i] = min(num[i],x / w[i]);
ans1 += use[i];
x -= use[i] * w[i];
num[i] -= use[i];
}
if (x){
cout << "-1 -1" << endl;
continue;
}
for (int i = 4;i >= 0;i--){
while (use[i]){
if (dfs(w[i],i-1)){
use[i]--;
num[i]++;
}
else
break;
}
ans2 += use[i];
}
cout << ans1 << ' ' << ans2 << endl;
}
}