您的位置:首页 > 其它

1068.Find More Coins

2015-01-23 16:30 381 查看
【题意】
这题是1048题的扩展,能用的硬币数可以不只是两枚,币值和必须跟给定价钱相等

【思路】
用map<int,int>存下每个币值的硬币数,然后从小往大试即可。有点类似于DFS

#include <iostream>
#include <stack>
#include <map>
using namespace std;

map<int,int> coins;
stack<int> res;

bool findCoins(int value){
for(map<int,int>::iterator it=coins.begin(); it!=coins.end() && (*it).first<=value; it++){
if((*it).second){
coins[(*it).first]--;
if((*it).first==value){
res.push((*it).first);
return true;
}
else if(findCoins(value-(*it).first)){
res.push((*it).first);
return true;
}
else{
coins[(*it).first]++;
}
}
}
return false;
}

int main(int argc, char const *argv[])
{
int n,m;

cin >> n >> m;
for(int i=0; i<n; i++){
int num;
cin >> num;
if(num<=m){
coins[num]++;
}
}

if(findCoins(m)){
bool first = true;
while(!res.empty()){
if(first){
first = false;
}
else{
cout << " ";
}
cout << res.top();
res.pop();
}
}
else{
cout << "No Solution";
}

system("pause");
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: