7 1 湊零錢 30分

2021-10-11 18:34:50 字數 880 閱讀 4014

8 9

5 9 8 7 2 3 4 1

1 3 5

4 8

7 2 4 3

no solution

動態規劃,先對硬幣價值公升序排序,從左向右依次選取硬幣,對於每個硬幣都有兩種情況,取或不取,當所取硬幣總額等於所需總額時,輸出(因為已經公升序排序,所得的第一組資料就是最小序列),以此進行遞迴。

測試點6執行超時:

當所有硬幣總額小於所需硬幣總額時,直接輸出"no solution"即可。

#include

using

namespace std;

const

int max =

10005

;int a[max]

;int n,m;

int flag=0;

int a1[max]

,a1_num=0;

void

dfs(

int x,

int sum)

return;}

if(x>n)

return;if

(flag==

0&&sum+a[x]

<=m)

}int

main()

if(sum

sort

(a,a+n)

;dfs(0

,0);

if(flag==

0) cout<<

"no solution"

<

}

7 68 湊零錢 30分

輸入格式 輸入第一行給出兩個正整數 nnn 104 le 10 4 10 4 是硬幣的總個數,mmm 102 le 10 2 10 2 是韓梅梅要付的款額。第二行給出 nnn 枚硬幣的正整數面值。數字間以空格分隔。輸出格式 在一行中輸出硬幣的面值 v1 v2 vkv 1 le v 2 le cdot...

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...