博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 4803 Poor Warehouse Keeper(贪心+数学)
阅读量:5877 次
发布时间:2019-06-19

本文共 1023 字,大约阅读时间需要 3 分钟。

题目大意:有以个屏幕能够显示两个值。一个是数量x。一个是总价y。有两种操作。一种是加一次总价,变成x,x+y;一种是加一个数量,这要的话总价也会对应加上一个的价钱,变成x+1。y+y/x。总价显示的为取整后的整数,小数部分忽略。给定一个目标x。y,初始状态为1,1。求最少须要多少次能够目标状态,不能够达到的话输出-1.

解题思路:假设是加一次总价的话,单位价格就在变大;假设是加一次数量的话,单位价格是不变的。

总而言之,单位价格是仅仅会往上涨,而不会往下降的。

然后物品的数量也必须从1变成x,也就是说至少要加x-1次单位价格才干够。那么假设单位价格过大ss(x1)y+1肯定是不予许的。所以对于每个i(数量)来说,单位价格都有一个上限值。以保证说在添加数量的时候不会导致总价溢出。

设当前数量为i,临界总价为t。那么就有
y+1>txi
t<(y+1)ix

即,每次对于一个数量,尽量加总价。使得单位价格尽量大,而且保证在和面加数量时不会大于上限,由于单位价格大的话,加一次数量总价接近目标值的速度会更快。
#include 
#include
#include
const double eps = 1e-9;int main () { double x, y; while (scanf("%lf%lf", &x, &y) == 2) { if (x > y) { printf("-1\n"); continue; } double k = (y+1-eps) / x; int cnt = (int)x - 1; double tmp = 1; for (int i = 1; i <= (int)x; i++) { double t = i * k; int u = (int)(t-tmp); tmp += u; tmp = tmp * (i+1) / i; cnt += u; } printf("%d\n", cnt); } return 0;}

转载地址:http://wlzix.baihongyu.com/

你可能感兴趣的文章
将 ASP.NET Core 2.0 项目升级至 ASP.NET Core 2.1 RC 1
查看>>
js提交图片转换为base64
查看>>
学习CodeIgniter框架之旅(二)继承自定义类
查看>>
Y2161 Hibernate第三次考试 2016年8月18日 试卷分析
查看>>
Angular CLI 使用教程指南参考
查看>>
PHP 程序员的技术成长规划
查看>>
用于守护进程的出错处理函数
查看>>
AppCan可以视为Rexsee的存活版
查看>>
【转】SQL SERVER 2005 数据库状态为“可疑”的解决方法
查看>>
事件、委托、委托方法的总结(使用EventHandler<>)
查看>>
Revit API 创建带箭头的标注
查看>>
jetty启动报错Unsupported major.minor version 51.0
查看>>
Xamarin.Android开发实践(七)
查看>>
彩色图像上执行Mean Shift迭代搜索目标 ,维加权直方图 + 巴氏系数 + Mean Shift迭代...
查看>>
深入理解JavaScript系列
查看>>
strtol 函数用法
查看>>
eclipse内存溢出设置
查看>>
搭建jenkins环境(linux操作系统)
查看>>
VS 2015 GIT操作使用说明
查看>>
上海办理房产税变更
查看>>