PAT 4C L3 001 湊零錢(DFS剪枝)

2021-07-11 21:05:10 字數 1047 閱讀 6613

時間限制

200 ms

記憶體限制

65536 kb

**長度限制

8000 b

判題程式

standard

作者 陳越

輸入格式:

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

輸出格式:

在一行中輸出硬幣的面值 v1

<= v2

<= ... <= vk,滿足條件 v1 + v2 + ... + vk = m。數字間以1個空格分隔,行首尾不得有多餘空格。若解不唯一,則輸出最小序列。若無解,則輸出「no solution」。

注:我們說序列比「小」,是指存在 k >= 1 使得 a[i]=b[i] 對所有 i < k 成立,並且 a[k] < b[k]。

輸入樣例1:

8 9

5 9 8 7 2 3 4 1

輸出樣例1:
1 3 5
輸入樣例2:
4 8

7 2 4 3

輸出樣例2:
no solution

#include using namespace std;

int scan()

void out(int a)

#define inf 0x3f3f3f3f

int val[10005];

int n,cap;

int ans[10005];

int flag,temp;

void dfs(int s,int v, int sur)

if(sur=val[i])

}else break;

}int main()

else printf("no solution\n");

}

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 湊零錢 深搜

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