你就要去購物了,現在你手上有n種不同面值的硬幣,每種硬幣有無限多個。為了方便購物,你希望帶盡量少的硬幣,但要能組合出1到x之間的任意值。
輸入格式:
第一行兩個數x、n,以下n個數,表示每種硬幣的面值。
【資料規模】
對於30%的資料,滿足n≤3,x≤20;
對於100%的資料,滿足n≤10,x≤1000.
輸出格式:
最少需要攜帶的硬幣個數,如果無解輸出-1.
輸入樣例#1: 複製
20 4輸出樣例#1: 複製1 2 5 10
5將面值從小到大排序
考慮用前ii種面值可以湊出的最大價值
顯然當且僅當a_1\neq 1a1≠1時是無解的,因為湊不出11
這樣就限定了a_1=1a1=1
假設已經湊出了11~ss的面值,那麼我們可以加入一張面值不超過s+1s+1的硬幣
如果超過s+1s+1,那麼就不可以湊出s+1s+1面值
設這個面值是aa,那麼可以把ss延伸到s+as+a
顯然這個面值越大越好
所以就直接找出a\leq s+1a≤s+1的最大的aa,然後把ss更新為s+as+a,同時ans++ans++即可
#include#includeview code#include
#include
#include
using
namespace
std;
int n,x,a[2000
],ans;
intgetin()
intmain()
int sum=0
;
while(sum
cout
}
洛谷 P1658 購物 貪心
為了湊出 1 x 的所有硬幣 假設當前已經湊出了1 m 的所有面值的硬幣,那麼為了湊出更大面值的硬幣,應該如何選擇呢?有這些情況 1 選面值 t 屬於 1 m 的硬幣 這當然可以,但是想一想,有沒有更好的選擇呢?我們選擇乙個面值為 t 的硬幣,那麼,我們下一次能夠湊出的面值為 1 m t 為了符合題...
洛谷 1658 購物
洛谷 1658 購物 你就要去購物了,現在你手上有n種不同面值的硬幣,每種硬幣有無限多個。為了方便購物,你希望帶盡量少的硬幣,但要能組合出1到x之間的任意值。輸入格式 第一行兩個數x n,以下n個數,表示每種硬幣的面值。資料規模 對於30 的資料,滿足n 3,x 20 對於100 的資料,滿足n 1...
2017紀中11 8 購物 貪心 優先佇列
題面 這題有點像samjia2000出的三元組。考慮把物品按qi從小到大排序,那麼一定有乙個分界點,使得在這個點之前的物品要麼買pi要麼買qi,這個點之後的物品要麼買pi,要麼不買 可以想象一下如果之前有乙個x不買,之後有乙個買qy,買qx不買y一定更優 於是設s i 為使用至多k張優惠券買下1 i...