You are a rich person, and you think your wallet is too heavy and full now. So you want to give me some money by buying a lovely pusheen sticker which costs p dollars from me. To make your wallet lighter, you decide to pay exactly pp dollars by as many coins and/or banknotes as possible.

For example, if p = 1 and you have two 10 coins, four 5 coins, and eight 1 coins, you will pay it by two 5coins and seven 1 coins. But this task is incredibly hard since you are too rich and the sticker is too expensive and pusheen is too lovely, please write a program to calculate the best solution.

Input Format

The first line contains an integer Tindicating the total number of test cases.

Each test case is a line with 1 integers p, c1, c5, c10, c20, c50, c100, c200, c500, c1000, c2000, specifying the price of the pusheen sticker, and the number of coins and banknotes in each denomination. The number ci means how many coins/banknotes in denominations of ii dollars in your wallet.

1≤T≤20000

0≤p≤109

0≤ci​≤100000

Output Format

For each test case, please output the maximum number of coins and/or banknotes he can pay for exactly p dollars in a line. If you cannot pay for exactly p dollars, please simply output '-1'.

样例输入复制

3
17 8 4 2 0 0 0 0 0 0 0
100 99 0 0 0 0 0 0 0 0 0
2015 9 8 7 6 5 4 3 2 1 0

样例输出复制

9
-1
36

题目来源

ACM Changchun 2015

/*
某些面值的钱分别有若干个,用这些钱来恰好组成某一金额的钱,问最多需要的钱的数目
逆向思维 用总价减去需求=X
那么贪心来用最少的数目凑成X即可(也可能凑不出来)
*/
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstdlib>
#include <cstring>
#include <string>
#include <deque>
using namespace std;
#define ll long long
#define N 1009
const ll inf =9e18;
#define gep(i,a,b) for(int i=a;i<=b;i++)
#define gepp(i,a,b) for(int i=a;i>=b;i--)
#define gep1(i,a,b) for(ll i=a;i<=b;i++)
#define gepp1(i,a,b) for(ll i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof(a))
ll val[]={,,,,,,,,,,};
ll num[],a[];
ll ans,p;
ll sum,ret;
int t;
void dfs(int x,ll sum,ll cnt)
{
if(!sum)
{
ans=min(ans,cnt);
return ;
}
if(x<) return ;
a[x]=min(sum/val[x],num[x]);
dfs(x-,sum-val[x]*a[x],cnt+a[x]);
if(a[x]>=)
{
a[x]--;
dfs(x-,sum-val[x]*a[x],cnt+a[x]);
}
/*
如 : 1
150 0 0 0 3 1 1 0 0 0 0
如果没有上面的三行就是无解 -1
但是 dfs(4,60,0) 因为 用了50,后面的就无法凑成10
但是后面的20*3可以凑成60,因此a[x]可一每次都减1,再去dfs
这样才能考虑到所有的情况!
*/
}
int main()
{
scanf("%d",&t);
while(t--)
{
scanf("%lld",&p);
mem(a,);
sum=;
ret=;
gep(i,,)
{
scanf("%lld",&num[i]);
ret+=num[i];
sum+=val[i]*num[i];
}
sum-=p;
if(sum<)
{
printf("-1\n");
continue;
}
ans=inf;
dfs(,sum,);
if(ans!=inf)
{
printf("%lld\n",ret-ans);
}
else{
printf("-1\n");
}
}
return ;
}

ACM Changchun 2015 A. Too Rich的更多相关文章

  1. ACM Changchun 2015 L . House Building

    Have you ever played the video game Minecraft? This game has been one of the world's most popular ga ...

  2. ACM Changchun 2015 J. Chip Factory

    John is a manager of a CPU chip factory, the factory produces lots of chips everyday. To manage larg ...

  3. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 G. Garden Gathering

    Problem G. Garden Gathering Input file: standard input Output file: standard output Time limit: 3 se ...

  4. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 D. Delay Time

    Problem D. Delay Time Input file: standard input Output file: standard output Time limit: 1 second M ...

  5. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 I. Illegal or Not?

    I. Illegal or Not? time limit per test 1 second memory limit per test 512 megabytes input standard i ...

  6. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 K. King’s Rout

    K. King's Rout time limit per test 4 seconds memory limit per test 512 megabytes input standard inpu ...

  7. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 H. Hashing

    H. Hashing time limit per test 1 second memory limit per test 512 megabytes input standard input out ...

  8. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 C. Colder-Hotter

    C. Colder-Hotter time limit per test 1 second memory limit per test 512 megabytes input standard inp ...

  9. ACM ICPC 2015 Moscow Subregional Russia, Moscow, Dolgoprudny, October, 18, 2015 A. Anagrams

    A. Anagrams time limit per test 1 second memory limit per test 512 megabytes input standard input ou ...

随机推荐

  1. Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) B

    Description Kostya likes Codeforces contests very much. However, he is very disappointed that his so ...

  2. 自己写的Grid组件,第二版

    大体没什么变化,主要是添加了一个方法,getSelectedItems(),返回当前选中的数据项. (function ($) { $.fn.GridView = function (setting) ...

  3. bio,nio,aio简介

    https://mp.weixin.qq.com/s/F9WwcsFdCOwOeeDc0oc98w——<BIO,NIO,AIO 总结>总结和对比这三种的区别 https://www.jia ...

  4. js AES对称加密 16进制和base64格式

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  5. SSM环境集成log4j

    本文只针对非Maven环境: 1.拷入log4j相关的.jar 2.在web.xml中配置 <!--由Spring载入的Log4j配置文件位置--> <context-param&g ...

  6. JS权威指南-概述学习

    <script src="/javascripts/application.js" type="text/javascript" charset=&quo ...

  7. Android adb命令,linux中各种命令

    常用的ADB命令 1. 显示系统中全部Android平台: android list targets 2. 显示系统中全部AVD(模拟器): android list avd 3. 创建AVD(模拟器 ...

  8. Android 图片在SD卡及包下的存储

    public class FileBitmap { /** * 获取sd卡中的bitmap,bitmap可见 * * @param bitmap * 读取bitmap的路径 * @return bit ...

  9. OutOfMemory

    查看图片格式,如果为PNG,可更改为jpg.图片会变小. 停止activity 当activity调用onStop()方法, activity不再可见,并且应该释放那些不再需要的所有资源.一旦acti ...

  10. IOS开发之----详解在IOS后台执行

    文一 我从苹果文档中得知,一般的应用在进入后台的时候可以获取一定时间来运行相关任务,也就是说可以在后台运行一小段时间. 还有三种类型的可以运行在后以,1.音乐2.location 3.voip 文二 ...