L3 001 湊零錢 30分

2021-10-09 19:22:40 字數 1220 閱讀 2131

輸入格式:

輸入第一行給出兩個正整數:n(≤10^4​​ )是硬幣的總個數,m(≤10 ^2​​ )是韓梅梅要付的款額。第二行給出 n 枚硬幣的正整數面值。數字間以空格分隔。

輸出格式:

在一行中輸出硬幣的面值 v​1​​ ≤v2≤⋯≤v​k​​ ,滿足條件 v​1​​ +v​2​​ +…+v​k​​ =m。數字間以 1 個空格分隔,行首尾不得有多餘空格。若解不唯一,則輸出最小序列。若無解,則輸出no solution

注:我們說序列比「小」,是指存在 k≥1 使得 a[i]=b[i] 對所有 i輸入樣例 1:

895

9872

341

輸出樣例 1:

1

35

輸入樣例 2:

487

243

輸出樣例 2:

no solution
#include

#include

#include

using

namespace std;

int n, m, tmp, flag, ans =0;

vector<

int>v, q;

void

dfs(

int i,

int sum)

if(flag || sum > m || i > n)

return

; q.

push_back

(v[i]);

dfs(i +

1, sum + v[i]);

q.pop_back()

;dfs

(i +

1, sum);}

intmain()

sort

(v.begin()

, v.

end())

;if(v[0

]> m || ans < m)

cout <<

"no solution"

;else

return0;

}

L3 001 湊零錢 (30 分)

輸入第一行給出兩個正整數 n 10 4 是硬幣的總個數,m 10 2 是韓梅梅要付的款額。第二行給出 n 枚硬幣的正整數面值。數字間以空格分隔。在一行中輸出硬幣的面值 v 1 v 2 v k 滿足條件 v 1 v 2 v k m。數字間以 1 個空格分隔,行首尾不得有多餘空格。若解不唯一,則輸出最小...

L3 001 湊零錢 30 分

題目鏈結 這種選和不選的題最好用遞迴做了,但是需要剪枝,然後就是對特殊情況的考慮,不然會超時。注意當陣列中所有數的和加起來都達不到目標值,就沒必要搜尋了,直接輸出無解 include using namespace std const int maxn 1e4 5 const int maxx 1e...

L3 001 湊零錢 30 分

輸入格式 輸入第一行給出兩個正整數 n 10 4 是硬幣的總個數,m 10 2 是韓梅梅要付的款額。第二行給出 n 枚硬幣的正整數面值。數字間以空格分隔。輸出格式 在一行中輸出硬幣的面值 v 1 v 2 v k 滿足條件 v 1 v 2 v k m。數字間以 1 個空格分隔,行首尾不得有多餘空格。若...