hdu 4803 贪心

来源:互联网 发布:淘宝直营店是什么意思 编辑:程序博客网 时间:2024/05/16 07:52

http://acm.split.hdu.edu.cn/showproblem.php?pid=4803

题意是两个数,x,y,x指个数,y指价值总和,两种操作,操作1:x+1(个数加一,总和在加一个单价,也就是y+=y/x),操作2:y+1(总和加一,个数不变,其实也相当于单价变高),问你从x=1,y=1开始,到达给的某个x1,y1,最少需要几步操作

可以去向单价方面考虑,既然要到达x1,y1这种状态,那么操作1的次数是固定的,并且操作1是不改变单价的,而操作2的次数是不确定的,并且操作2会更改单价,我们要使最后单价增加到y1/x1且尽量少的操作,必然就是每次操作2增加的单价尽可能的多最好,而操作2每次是使总价加1,也就是使单价加1/x,那么保证x尽可能的小必然就是最优的

所以每次进行操作1之前,都使用操作2把当前单价抬越高越好(且不超限)


还有精度1e-7往上都过不了。。。。。可能是写法的问题。。


#include<bits/stdc++.h>const double eps=1e-5;using namespace std;int main(){double x,y,x1,y1;while(~scanf("%lf %lf",&x,&y)){if(y<x){printf("-1\n");continue;}int ans=0;y1=1;for(x1=1;x1<=x;x1++){double now=(y+1-eps)*x1/x;//可以抬的最高当前总价int add=floor(now-y1);ans+=add;y1+=add;ans++;//操作1y1+=y1/x1;//操作1}printf("%d\n",ans-1); } return 0; }


原创粉丝点击