NOIP2016模擬 JackMa 貪心

2021-08-10 02:25:58 字數 1112 閱讀 2093

問題描述

mr_he 因討厭???(手動和諧)而徹底放棄網購,他的日常用品都要到商場去購買,而且必須付現金。但是現 金購買,經常會遇到找零的問題,那麼現在請你幫助他解決這樣乙個問題: 現在 mr_he 手上有 n 種不同面值的硬幣,每種硬幣有無限多個。為了方便購物,他希望帶盡量 少的硬幣,但是要能組合出 1 到 m 之間的任意值。

輸入格式

第一行為兩個整數:m 和 n,他們的意義如題目描述。

接下來的 n 行,每行乙個整數,第 i+1 行的整數表示第 i 種硬幣的面值

輸出格式

最少需要攜帶的硬幣數量,如果無解則輸出-1。

樣例輸入

20 4

1 2

5 10

樣例輸出

資料範圍

50%的資料:1<=n<=10, 1<=m<=10^3;

100%的資料:1<=n<=100,1<=m<=10^9;

m的範圍非常大,如果dp的話就只能看能否把m這一維壓縮,然而這是比較困難的。

首先考慮無解的情況,很顯然,如果沒有1就無解。只要有1就一定有解,因為每種硬幣是無限多的。

注意到大面值硬幣是湊不出小面值的,但如果我們要硬幣盡量少,大面值的又不能太少。所以按面值從小到大的順序討論,盡量用已經選的硬幣湊成大面值硬幣的面值-1,如果不能恰好湊成就多用乙個。詳情見**:

#include

#include

#include

using

namespace

std;

int m,n,a[105],ans;

int main()

printf("%d",ans);

}

NOIP2016提高組模擬 積木

比賽的時候用了個神奇的小暴力,本來打算拿40分,沒想到暴力出奇蹟,隨機資料下表現優良,居然碾過去了。暴力方法不講,只貼 僅供對拍。正解顯然要用狀態壓縮 看資料範圍 設fs i,0 1 2 s表示當前已選擇的積木集合,i表示在最上方的積木編號,0 1 2表示最上方的積木哪面朝上。轉移方程容易推導。暴力...

NOIP2016複賽模擬賽 朋友

問題描述 mxy 即將前往新世界。在前往新世界的過程中,ta 遇見了兩種人。一種是只和lowb 做朋友,即當且僅當自己 的能力值大於對方時他們會成為朋友,另一種是大神我們做朋友,即當且僅當自己的能力 值小於對方時他們會成為朋友。現在告訴你兩種人的能力值。請你計算一共有多少對友好關係。輸入 每組測試資...

計數 NOIP2016提高A組模擬7 15

樣例輸入 2 10 樣例輸出 90資料範圍 剖解題目 題目說的很明了了。思路 求方案數,一般會設計道dp,規律之類的。解法 數字dp,設f i j 表示當前到了第i位,這一位的數字是j的方案數。自然有 f i j f i 1 l f i j 0 l k 且 l 0 and j 0 看到這位數,很明顯...