贪心是一种算法范例,它一点一点地构建解决方案,总是选择下一个提供最明显和最直接好处的部分。因此,选择局部最优也会导致全局解的问题最适合贪心问题。

例如,考虑分数背包问题。局部最优策略是选择权重比最大的项。这个策略也导致了全局最优解。

假设1元、2元、5元、10元、20元、50元、100元的纸币分别有a,b,c,d,e,f,g张。现在要用这些钱来支付m元,至少要用多少张纸币?用贪心算法的思想,每一次选择最大面值的钱币。

#include <iostream>
#include <vector>
#include <algorithm> using namespace std; vector<int> Num{ ,,,,,, }, Value{ ,,,,,, }; int BagsQues(int money) {
int sum = ;
for (int i = Value.size() - ; i >= ; --i) {
int N = min(money / Value[i], Num[i]);
money = money - N * Value[i];
sum += N;
if (money == )
return sum;
} return -;
} int main()
{
int money;
cin >> money;
int m = BagsQues(money);
cout << m << endl; system("PAUSE");
return ;
}

求出每张面额,用了多少张:

#include <iostream>
#include <vector>
#include <tuple>
#include <algorithm> using namespace std; vector<int> Num{ ,,,,,, }, Value{ ,,,,,, }; vector<tuple<int, int> > BagsQues(int money) {
int sum = ;
vector<tuple<int, int> > ch;
for (int i = Value.size() - ; i >= ; --i) {
int N = min(money / Value[i], Num[i]);
money = money - N * Value[i];
sum += N;
if (N != ) {
ch.push_back({ Value[i], N });
}
if(money == )
return ch;
}
ch.clear();
ch.push_back({ -, - });
return ch;
} int main()
{
int money;
cin >> money;
vector<tuple<int, int> > m = BagsQues(money);
for (int i = ; i < m.size(); ++i) {
cout << get<>(m[i]) << ":" << get<>(m[i]) << endl;
} system("PAUSE");
return ;
}

贪心:钱币找零问题(C++)的更多相关文章

  1. js贪心算法---钱币找零问题

    function MinCoinChange(coins){ var coins = coins.sort(function(a,b){ return b - a; }); this.makeChan ...

  2. LeetCode 860. 柠檬水找零 (贪心)

    在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 5 美元.10 美元或 20 美元.你必须给 ...

  3. codevs 3961 硬币找零【完全背包DP/记忆化搜索】

    题目描述 Description 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从银行拿回最少的硬币数,并保证能用这些硬币发工资. 我们应该 ...

  4. 没有找零 状压dp

    没有找零 状压dp 约翰到商场购物,他的钱包里有K(1 <= K <= 16)个硬币,面值的范围是1..100,000,000.约翰想按顺序买 N个物品(1 <= N <= 1 ...

  5. NYOJ 995 硬币找零

    硬币找零 时间限制:1000 ms  |  内存限制:65535 KB 难度:3   描述 在现实生活中,我们经常遇到硬币找零的问题,例如,在发工资时,财务人员就需要计算最少的找零硬币数,以便他们能从 ...

  6. usaco 最少找零

    Description 约翰在镇上买了 T 元钱的东西,正在研究如何付钱.假设有 N 种钞票,第 i 种钞票的面值为 Vi,约翰身上带着这样的钞票 Ci 张.商店老板罗伯是个土豪,所有种类的钞票都有无 ...

  7. python基础----找零问题

    给定要找回的总钱数和硬币的种类,求出找零所需最少的硬币数目. 例如: 总钱数63,硬币种类为25.21.10.5.1,求出最小硬币数 分析: 我们可以先假设只有一种硬币1, 假如总钱数为1,硬币数就为 ...

  8. 【LeetCode】860. 柠檬水找零

    860. 柠檬水找零 知识点:贪心 题目描述 在柠檬水摊上,每一杯柠檬水的售价为 5 美元. 顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯. 每位顾客只买一杯柠檬水,然后向你付 ...

  9. [LeetCode] Coin Change 硬币找零

    You are given coins of different denominations and a total amount of money amount. Write a function ...

随机推荐

  1. 《网络攻防》 第十二周作业 SQL注入

    SQL注入实践 1.打开seed虚拟机,使用命令sudo service apache2 start启动apache,发现一条提示,意思就是不能可靠地确定域名,如图 即使右下角标着OK,但我还是不放心 ...

  2. 以证书的方式登录ssh

    常常要登录多台Linux服务器,过去在Windows下使用SecureCRT,比较省心,配置还可以放到云盘,实时同步.现在改用MAC貌似就没有那么好用的东西了,每次ssh命令登录都需要输入密码,很烦. ...

  3. upper_bound下确界

    //uppper_bound上确界找出首个大于某值的元素 #include<algorithm> #include<iostream> using namespace std; ...

  4. git 命令总结(转)

    结构图: <1> Workspace:工作区 Index / Stage:暂存区 Repository:仓库区(或本地仓库) Remote:远程仓库 一.新建代码库   # 在当前目录新建 ...

  5. python web开发之flask框架学习(2) 加载模版

    上次学习了flask的helloword项目的创建,这次来学习flask项目的模版加载: 第一步:创建一个flask项目 第二步:在项目目录的templates文件夹下创建一个html文件 第三步: ...

  6. dedecms图片绝对路径(附件绑定域名)的设置方法

    dedecms默认的附件路径使用的是相对路径,但是在实际应用,我们可能会需要让文章的图片附件显示绝对地址,解决方案如下: 1.打开include目录下的文件extend.func.php,添加函数re ...

  7. P4219 [BJOI2014]大融合 LCT维护子树大小

    \(\color{#0066ff}{ 题目描述 }\) 小强要在\(N\)个孤立的星球上建立起一套通信系统.这套通信系统就是连接\(N\)个点的一个树. 这个树的边是一条一条添加上去的.在某个时刻,一 ...

  8. CF431B Shower Line

    Many students live in a dormitory. A dormitory is a whole new world of funny amusements and possibil ...

  9. 牛客国庆集训day6 B Board (模拟标记思维或找规律或分块???)

    链接:https://www.nowcoder.com/acm/contest/206/B来源:牛客网 题目描述 恬恬有一个nx n的数组.她在用这个数组玩游戏: 开始时,数组中每一个元素都是0. 恬 ...

  10. HDU6299 Balanced Sequence (多校第一场1002) (贪心)

    Balanced Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others ...