hdu 4803 Poor Warehouse Keeper(贪心+数学)
来源:互联网 发布:淘宝收藏店铺怎么删除 编辑:程序博客网 时间:2024/05/22 06:44
题目链接:hdu 4803 Poor Warehouse Keeper
题目大意:有以个屏幕可以显示两个值,一个是数量x,一个是总价y。有两种操作,一种是加一次总价,变成x,x+y;一种是加一个数量,这要的话总价也会相应加上一个的价钱,变成x+1,y+y/x。总价显示的为取整后的整数,小数部分忽略。给定一个目标x,y,初始状态为1,1,求最少需要多少次可以目标状态,不可以达到的话输出-1.
解题思路:如果是加一次总价的话,单价就在变大;如果是加一次数量的话,单价是不变的。总而言之,单价是只会往上涨,而不会往下降的。
然后物品的数量也必须从1变成x,也就是说至少要加x-1次单价才可以,那么如果单价过大s,s∗(x−1)≥y+1肯定是不予许的。所以对于每一个i(数量)来说,单价都有一个上限值,以保证说在增加数量的时候不会导致总价溢出。
设当前数量为i,临界总价为t,那么就有
y+1>t∗xi
t<(y+1)∗ix
即,每次对于一个数量,尽量加总价,使得单价尽量大,并且保证在和面加数量时不会大于上限,因为单价大的话,加一次数量总价接近目标值的速度会更快。
#include <cstdio>#include <cstring>#include <cmath>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;}
1 0
- hdu 4803 Poor Warehouse Keeper(贪心+数学)
- HDU 4803 Poor Warehouse Keeper(贪心)
- HDU - 4803 Poor Warehouse Keeper(贪心)
- HDU 4803 Poor Warehouse Keeper(贪心)
- [HDU 4803]Poor Warehouse Keeper[贪心]
- hdu 4803 Poor Warehouse Keeper(贪心)
- hdu 4803 Poor Warehouse Keeper (贪心思维)
- hdu 4803 Poor Warehouse Keeper(贪心)
- HDU 4803 Poor Warehouse Keeper(贪心)
- HDU 4803 Poor Warehouse Keeper
- HDU 4803 Poor Warehouse Keeper
- 【HDU4803】Poor Warehouse Keeper 数学+贪心
- HDU 4803 Poor Warehouse Keeper 贪心 二分搜索
- [hdu 4803]Poor Warehouse Keeper 进制相关 贪心
- HDU——4803 Poor Warehouse Keeper
- HDU 4803 Poor Warehouse Keeper 模拟
- HDU 4803Poor Warehouse Keeper(数学题)
- HDU4803 Poor Warehouse Keeper【贪心】
- Java编程规范
- 机器学习week9(一)_anomaly detection
- codec 直接读取jpeg文件的尺寸
- ValueError: unsupported format character
- 在linux下安装glut包
- hdu 4803 Poor Warehouse Keeper(贪心+数学)
- ADF table列中下拉取值问题
- 去耦电容与旁路电容详解
- 一道UVA上比较诡异的搜索
- 重启windows defender
- Android之SurfaceView学习(一)
- 2014年百度之星资格赛第一题Energy Conversion
- jiulianhuan 快速幂--矩阵快速幂
- 一个工程师对流程管理的思考[转]