輸入第一行給出兩個正整數:n(≤104)是硬幣的總個數,m(≤102)是韓梅梅要付的款額。第二行給出 n 枚硬幣的正整數面值。數字間以空格分隔。
在一行中輸出硬幣的面值 v1≤v2≤⋯≤vk,滿足條件 v1+v2+...+vk=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 個空格分隔,行首尾不得有多餘空格。若解不唯一,則輸出最小...