P1658 购物(贪心算法)
P1658 購物
提交 2.48k
通過 1.16k
時間限制 1.00s
內存限制 125.00MB
題目描述
你就要去購物了,現在你手上有N種不同面值的硬幣,每種硬幣有無限多個。為了方便購物,你希望帶盡量少的硬幣,但要能組合出1到X之間的任意值。
輸入格式
第一行兩個數X、N,以下N個數,表示每種硬幣的面值。
【數據規模】
對于30%的數據,滿足N≤3,X≤20;
對于100%的數據,滿足N≤10,X≤1000.
輸出格式
最少需要攜帶的硬幣個數,如果無解輸出-1.
輸入輸出樣例
輸入 #1
20 4
1 2 5 10
輸出 #1
5
題目鏈接:https://www.luogu.com.cn/problem/P1658
1.首先我們要判斷數組內是否存在1,因為面額1只有1可以組成,而且如果存在面值1的硬幣,是一定可以組成出1-x的面值。
2.每次盡量用最大面值硬幣組合,這樣子才可以組成出最小的攜帶數。因此用sort排序。
上樣例分析:
第一次取1:
reach=1;當前可以組成的面額值
第二次取2:1,2,3
觀察:3是利用1+2得出的,如果我們當前可以取到的面額為reach,那么我們再攜帶的一個硬幣a[i],1–reach+a[i]都是可以組合出來的,因為2可以和1–reach的面值任意組合都是可行的所以reach更新為reach+=a[i];reach為3
第三次取2:1,2,3,4,5
與上同理reach為5
總結
以上是生活随笔為你收集整理的P1658 购物(贪心算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 三电极体系电化学传感器
- 下一篇: u盘计算机无法,计算机无法识别U盘的问题