购物--贪心例题
1.题目
2.思路分析
设已经组合出1-s的值,,即已经得到1,2,3,4,。。。,s,下一步扩展到s+1。当然如果能顺便扩展到s+2,s+3,...,s+v则更好,扩展的越大越好,这样就能用尽量少的面值扩展出更大的数。
只要增加一个最大的 <=当前已经扩展到的值 的数v,就可以保证这些所选的硬币可以扩展到S+V的数。
3.代码呈现
#include<iostream>
#include<algorithm>
using namespace std;
int x, n;
const int N = 1010;
int a[N];
int main()
{int cnt = 0;//答案int s = 0;cin >> x >> n;for(int i = 0; i < n; i++){cin >> a[i];}sort(a, a + n);if (a[0] != 1){cout << "-1" << endl;return 0;}while(s<x){//因为正序的话只要有1,就不会往下执行了for (int j = n-1; j >=0; j--){if (a[j] <= s+1){cnt++;s += a[j];break;}}}cout << cnt << endl;return 0;
}