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

2021-08-29 02:06:33 字數 2283 閱讀 7788

時間限制

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;

#define maxn 11000

intvis[maxn];

ints[maxn];

inttmp[maxn];

intn, m;

intcnt;

intflag;

intall;

void dfs(int index,int sum, int cnt,int tol)//

tol 為剩餘的錢數

for(int i = index + 1; i < n; i++)

} } int

main()

sort(s, s +n);

cnt = 0

; dfs(-1,0

, cnt,all);

if(!flag)

printf(

"no solution\n

");

}

01

本來揹包判斷是否存在,然後dfs的 但是只有28分   然後學了下記錄路徑

b[sum]=a[i] 就是代表 sum的錢=a[i]+b[ sum-a[i] ] 這樣遞迴下去 直接sum=0 這樣就得到路徑了

#include using

namespace

std;

int dp[10005

];int b[10005

];int a[10005];

void dfs(int

t) dfs(t-b[t]);

printf("%d

",b[t]);}

intmain()}}

}if(!b[m])

puts(

"no solution");

else dfs(m),puts(""

);

return0;

}

我28分的dfs

#include#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

int a[10005

];bool v[10005

];int c[10005

];int k=1

;

intn,m;

bool f=0

;void display(ints)}

void dfs(int sum,int

s)

for(int i=1;i<=k-1;i++)

}}int

main()

sort(a+1,a+k);

dfs(

0,1);

if(!f) cout<

no solution";

}

view code

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

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

L3 001 湊零錢 30分 (DFS)

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

L3 001 湊零錢 (01揹包)

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