Strange fuction HDU - 2899
Posted aracne
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Strange fuction HDU - 2899相关的知识,希望对你有一定的参考价值。
Now, here is a fuction:
F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)
Can you find the minimum value when x is between 0 and 100.
题意,输入一个y,然后确定这个函数的最小值
很明显是一道2分的题,可是一开始做的时候不会分啊啊啊啊啊啊啊啊啊啊啊啊啊啊(电子竞技菜是原罪)呜呜呜呜呜
其实耶不能怪我。。。。要二分的话,需要给F(x)求导,发现它在定义域俄式单调递增的,所以给dF求导,然后用二分,求出它的0点
再带回原来的表达式,代码如下
ps:我好气啊,当时都想到了导数,但不能明确的确定它的单调性,唉,可惜。
#include <bits/stdc++.h> #define INF 0x3f3f3f3f const double PI=3.1415926535897931; const long long sale=1e9+10; const int MA= 1e7+10; const int ma= 2*1e5+10; const int few=1e3+10; const double eps=1e-7; using namespace std; ////////////////////////////////////////////// double f(double x,double y) { return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x; } double f1(double x,double y) { return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y; } int main() { int t; cin>>t; while(t--) { double y; cin>>y; double l=0,r=100; double mid; while(r-l>eps) { mid=(l+r)/2; if(f1(mid,y)<0) l=mid; else r=mid; } double ans=f(l,y); printf("%0.4f ",ans); } return 0; }
以上是关于Strange fuction HDU - 2899的主要内容,如果未能解决你的问题,请参考以下文章
HDU 2899 Strange fuction (模拟退火)
hdu2899Strange fuction(解方程+二分)
HDU 2899 Strange fuction(牛顿迭代)