JZOJ.1153【贪心算法】硬币交换
好难啊!!!
可聪明的我还是解出来了!(逃
题目描述
小z最近迷上了一款游戏――To Be A Farmer,他在游戏中控制的人物是一个叫FZ的Farmer。FZ身上有G1个金币、S1个银币和B1个铜币,而他至少需要G2个金币、S2个银币和B2个铜币。为了完成这个目标,小z只好控制FZ来到了游戏中的银行。银行有如下规定:
(1)你可以用1个金币交换9个银币;
(2)你可以用11个银币交换1个金币;
(3)你可以用1个银币交换9个铜币;
(4)你可以用11个铜币交换1个银币;
小z看到这些规定,顿时头大了,只好求助于你。聪明的你来帮助他解决这样一个问题:最少需要交换多少次硬币才能至少拥有G2个金币、S2个银币和B2个银币呢?
输入
第1行包含三个整数:G1、S1和B1。
第2行包含三个整数:G2、S2和B2。
0 ≤ G1、S1、B1、G2、S2、B2 ≤ 10000000。
输出
如果可以完成任务的话,输出一个整数表示最少交换次数;否则输出整数-1。
样例输入
10 0 0
0 0 81
样例输出
10
初步思路:
- 判断可不可以刚好用完。
- 如果不,则将现有金钱通过兑换减少。(1个金币,2次交换 金->银->金,减为原来的9/11)
- 重复1,2,直到刚好换到所需的钱。
码完代码,提交到OJ,真是:
TLE里说今年,听取WA~声一片!
介才系建切希露:
- 将银币换为所需金币和铜币。
- 判断已有银币和所需银币的大小。
- 若所需银币大于已有银币,则是Impossible。
- 反之则模拟 暴力 次数。
代码在这儿(说得这么明白,都不想放了)
#include<bits/stdc++.h>
using namespace std;
int a1,b1,c1,a2,b2,c2,ans;
int main()
{
cin>>a1>>b1>>c1>>a2>>b2>>c2;
if(a1 < a2)
{
ans+=a2-a1;
b1-=(a2-a1)*11;
a1=a2;
}
if(c1 < c2)
{
ans+=(c2-c1+8)/9;
b1-=(c2-c1+8)/9;
c2+=(c2-c1+8)/9*9;
}
if(b1 < b2 && a1 > a2)
{
if(b1+(a1-a2)*9 < b2)
{
ans+=(a1-a2);
b1+=(a1-a2)*9;
a1=a2;
}
else
{
ans+=(b2-b1+8)/9;
a1-=(b2-b1+8)/9;
b1+=(b2-b1+8)/9*9;
}
}
if(b1 < b2)
{
if(b1+(c1-c2)/11 >= b2)
{
ans+=(c1-c2)/11;
b1+=(c1-c2)/11;
c1-=(c1-c2)/11*11;
}
}
b1 >= b2 ? cout<<ans<<endl : cout<<-1<<endl;
return 0;
}
JZOJ.1153【贪心算法】硬币交换的更多相关文章
- 最少的硬币数量组合出1到m之间的任意面值(贪心算法)
题目描述: 你有n种不同面值的硬币,每种面值的硬币都有无限多个,为了方便购物,你希望带尽量少的硬币,并且要能组合出 1 到 m 之间(包含1和m)的所有面值. 输入描述: 第一行包含两个整数:m ,n ...
- js算法初窥05(算法模式02-动态规划与贪心算法)
在前面的文章中(js算法初窥02(排序算法02-归并.快速以及堆排)我们学习了如何用分治法来实现归并排序,那么动态规划跟分治法有点类似,但是分治法是把问题分解成互相独立的子问题,最后组合它们的结果,而 ...
- PAT甲题题解-1067. Sort with Swap(0,*) (25)-贪心算法
贪心算法 次数最少的方法,即:1.每次都将0与应该放置在0位置的数字交换即可.2.如果0处在自己位置上,那么随便与一个不处在自己位置上的数交换,重复上一步即可.拿样例举例: 0 1 2 3 4 5 ...
- JavaScript算法模式——动态规划和贪心算法
动态规划 动态规划(Dynamic Programming,DP)是一种将复杂问题分解成更小的子问题来解决的优化算法.下面有一些用动态规划来解决实际问题的算法: 最少硬币找零 给定一组硬币的面额,以及 ...
- python常用算法(6)——贪心算法,欧几里得算法
1,贪心算法 贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以考虑,他所做出的的时在某种意义上的局部最优解. 贪心算法并不保证会得到最优解,但 ...
- 贪心算法(Greedy Algorithm)
参考: 五大常用算法之三:贪心算法 算法系列:贪心算法 贪心算法详解 从零开始学贪心算法 一.基本概念: 所谓贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择.也就是说,不从整体最优上加以 ...
- 算法导论----贪心算法,删除k个数,使剩下的数字最小
先贴问题: 1个n位正整数a,删去其中的k位,得到一个新的正整数b,设计一个贪心算法,对给定的a和k得到最小的b: 一.我的想法:先看例子:a=5476579228:去掉4位,则位数n=10,k=4, ...
- LEETCODE —— Best Time to Buy and Sell Stock II [贪心算法]
Best Time to Buy and Sell Stock II Say you have an array for which the ith element is the price of a ...
- ACM_ICPC hdu-2111(简单贪心算法)
一道非常简单的贪心算法,但是要注意输入的价值是单位体积的价值,并不是这个物品的总价值!#include <iostream> #include <stdio.h> #inclu ...
- 基于贪心算法的几类区间覆盖问题 nyoj 12喷水装置(二) nyoj 14会场安排问题
1)区间完全覆盖问题 问题描述:给定一个长度为m的区间,再给出n条线段的起点和终点(注意这里是闭区间),求最少使用多少条线段可以将整个区间完全覆盖 样例: 区间长度8,可选的覆盖线段[2,6],[1, ...
随机推荐
- c++ 容器反转并且拷贝到一个新容器中
// reverse_copy example #include <iostream> // cout #include <algorithm> // reverse_copy ...
- 图解Linux进程间通信实现原理(1)
为Linux应用程序的开发人员,对Linux的进程间通信方式肯定是了如指掌,平时的开发中应该会大量的使用到.当你迅速的在键盘上按下[CTRL+C]终止掉一个正在运行中的命令时,你有没有仔细的思考过背后 ...
- Flutter安装
下载右边的安装包以获取最新版本 stable 的 Flutter SDK 将压缩包解压,然后把其中的 flutter 目录整个放在你预想的 Flutter SDK 安装目录中(比如 C:\src\fl ...
- 彻底搞清楚javascript中的require、import和export(js模块加载规范的前世今生)
为什么有模块概念 理想情况下,开发者只需要实现核心的业务逻辑,其他都可以加载别人已经写好的模块. 但是,Javascript不是一种模块化编程语言,在es6以前,它是不支持”类”(class),所以也 ...
- 五一 DAY 5
五一 DAY 5 V 点 1----n E 边 /* Given a graph with N nodes and M unidirectional edges. Each edge e_i ...
- ffmpeg+nginx搭建直播服务器
Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器 https://zhuanlan.zhihu.com/p/28009037 FFmpeg总结(十三)用ffmpeg基于n ...
- C#中正则表达式解析字符串信息
正则表达式提取0~9数字 private static string RegexPickupNumber(string str) { string pattern = @"[^0-9]+&q ...
- 使用极路由进行外网映射,本地电脑做服务器,运行javaWeb项目
最近在学习javaWeb,一个项目需要android访问服务器,于是使用自己的笔记本电脑作为服务器,需要进行端口映射.使得外网可以访问自己的javaWeb项目或者网站之类的.普通路由请看:http:/ ...
- [Bayes] *Bayesian Classifier for Face Recognition
Bayesian在识别领域的贡献,着实吸引人 阅读笔记 Gabor特征 (简介,另单独详述) 通过上面的分析,我们知道了,一个Gabor核能获取到图像某个频率邻域的响应情况,这个响应结果可以看做是图像 ...
- app怎么获取package与active name
1.aapt dump badging apk名称 2.adb logcat | grep START 或者 adb shell "logcat | grep START" 然后在 ...