Strange function HDU - 2899

Show Problem - System Message

题目大意:求方程f(x)=6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)在x属于0到100时的最小值

思路:f'(x)=42*x^6+48*x^5+21*x^2+10*x-y,f''(x)=252x^5+240*x^4+42*x+10,在x属于0到100的范围内,f''(x)恒大于0,所以f'(x)的图像是一条单增的直线,且在最小值x=0处,f'(x)=-y,,y>0,所以f'(x)的图像一定穿过x轴,那么f(x)的最小值一定就在f'(x)=0的时候,通过二分查找f'(x)=0的点即可

 

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin >> t;
	while (t--)
	{
		double y;
		cin >> y;
		double l = 0, r = 100,mid;
		while (l <= r - 0.0000001)
		{
			mid = (l + r)/2 ;
			if ((42 * pow(mid, 6) + 48 * pow(mid, 5) + 21 * pow(mid, 2) + 10 * mid - y) > 0)//f'(x)大于0,最值点应该小于当前的x
				r = mid;
			else
				l = mid;//反之应该大于当前的x
		}
		cout << fixed << setprecision(4) << 6 * pow(mid,7) + 8 * pow(mid,6) + 7 * pow(mid,3) + 5 * pow(mid,2) - y * mid << endl;
	}
	return 0;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

timidcatt

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值