L3 001 湊零錢 30分

2021-10-07 08:23:12 字數 913 閱讀 2550

輸入第一行給出兩個正整數:n(≤10 ​4 ​​ )是硬幣的總個數,m(≤10 ​2 ​​ )是韓梅梅要付的款額。第二行給出 n

枚硬幣的正整數面值。數字間以空格分隔。

輸出格式: 在一行中輸出硬幣的面值 v ​1 ​​ ≤v ​2 ​​ ≤⋯≤v ​k ​​ ,滿足條件 v ​1 ​​ +v ​2 ​​

+…+v ​k ​​ =m。數字間以 1 個空格分隔,行首尾不得有多餘空格。若解不唯一,則輸出最小序列。若無解,則輸出 no solution。

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

5987

2341

1

35

487

243

no solution
#include

#include

#include

using

namespace std;

int a[

10010];

int dp[

110]

;bool cho[

10010][

110]

;bool

cmp(

int a,

int b)

intmain()

}}if(dp[m]

!= m)

j = m; i = n;

while

(j >0)

i--;}

return0;

}

這原本是0-1揹包問題,只是需要輸出序列而變得複雜。需要注意下面對dp的搜尋。感覺這點學到了不少,對揹包又有了一些理解

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 個空格分隔,行首尾不得有多餘空格。若...