SZ#G6KP29. 【GESP强化 六级】精确付款

提交1 通过1
通过率100%
时间限制2000ms
内存限制256MiB
    ID: 11573 传统题 2000ms 256MiB 尝试: 1 已通过: 1 难度: 入门 上传者: 标签>GESPGESP强化C++c++编程题背包问题0/1背包最少张数1星

题目描述

刘老师购买一件价格为 1414 元的商品,拿出一张 2020 元纸币付款,却得知收款方无法找零。于是他改用一张 1010 元和一张 55 元纸币,并不再索要多付的金额。

在一些不能使用银行卡、收款方又没有零钱的地方,付款人可能无法刚好付出商品价格,只能支付略高于价格的金额。你希望首先让实际支付金额尽可能小,但不得低于商品价格;在实际支付金额最小的前提下,还希望使用的硬币和纸币总数尽可能少。每张硬币或纸币最多使用一次。

输入格式

第一行包含测试数据组数 TT

每组数据的第一行包含商品价格 PP,单位为分,且 P10000P\le10000

第二行包含一个整数 nn,表示拥有的硬币和纸币数量,且 n100n\le100

接下来 nn 行,每行包含一个整数,表示一张硬币或纸币的面值,单位为分。每张的面值不超过 1000010000。输入保证所有钱的总面值不小于商品价格。

输出格式

对每组数据输出一行两个整数,分别表示实际支付的最小金额,以及在该金额下使用的最少硬币和纸币数量。

1
1400
3
500
1000
2000
1500 2
2
1140
6
5482
4765
824
5763
827
1920
6453
7
3304
5231
9909
7143
7531
4722
3447
1651 2
6751 2
3
2222
7
3170
9698
4017
1121
691
6296
1235
1899
8
9538
8606
2992
1988
7961
7593
3439
1414
2514
9
2557
6248
6522
3508
773
9034
2447
7295
5413
2356 2
1988 1
2557 1

说明/提示

数据范围与约定

  • P10000P\le10000
  • n100n\le100
  • 每张硬币或纸币的面值不超过 1000010000
  • 所有钱的总面值不小于商品价格