确实是 找钱问题,参考了下,感觉现在应该没问题,好像还不用排序。
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
	int n;
	vector<int> v;
	int money;
	while (cin >> n)
	{
		v.push_back(n);
	}
	money = v[v.size() - 1];
	v.pop_back();
	//sort(v.begin(), v.end());
	int length = v.size();
	int *days = new int[money + 1];
	int *value = new int[money + 1];
	days[0] = 0;
	for (int i = 1; i <= money; i++)
	{
		int min = i;
		int used = 0;
		for (int j = 0; j < length; j++)
		{
			if (i >=v[j])
			{
				if (days[i - v[j]] + 1 <= min && (i == v[j] || value[i - v[j]] != 0))
				{
					min = days[i - v[j]] + 1;
					used = v[j];
				}
			}
		}
		days[i] = min;
		value[i] = used;
	}
	if (value[money] == 0)
		cout << -1 << endl;
	else
		cout << days[money] << endl;
	//system("pause");
	return 0;
}