1068.Find More Coins

【題意】
        這題是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;
}


發佈了99 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章