L3 001 湊零錢 dfs 剪枝或者01揹包

2021-09-11 03:09:20 字數 781 閱讀 2659

輸入第一行給出兩個正整數: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] 對所有 i輸入

8 9 

5 9 8 7 2 3 4 1

輸出1 3 5

資料太水,沒想到dfs剪剪枝就過了。

然後用01揹包做了一下

#include#include#include#include#includeusing namespace std;

const int maxn=1e4+5;

int n,m;

int a[maxn];

stacks;

bool dfs(int x,int sum)else if(dfs(x+1,sum))

return false;

}int main()

}if(f[1][m]!=m) cout<<"no solution"<=0&&f[i][x]==f[i+1][x-a[i]]+a[i])

else cout<<" "

} }}

return 0;

}

L3 001 湊零錢(dfs或者01揹包)

時間限制 200 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 陳越 輸入格式 輸入第一行給出兩個正整數 n 104 是硬幣的總個數,m 102 是韓梅梅要付的款額。第二行給出n枚硬幣的正整數面值。數字間以空格分隔。輸出格式 在一行中輸出硬幣的面值 v...

L3 001 湊零錢 30分 (DFS)

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

L3 001 湊零錢 (30 分)

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