【三分/函式先減後增/先增後減】 Strange fuction HDU基礎04二分法
阿新 • • 發佈:2019-02-14
Problem Description
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.
Input
The first line of the input contains an integer T(1<=T<=100) which means the number of test cases. Then T lines follow, each line has only one real numbers Y.(0 < Y <1e10)Output
Sample Input
2 100 200
Sample Output
-74.4291 -178.8534
Author
Redow#include <bits/stdc++.h> using namespace std; double po(double x,int y) { double res=1; for(int i=0;i<y;i++) res*=x; return res; } int y; double F(double x) { //函式先減後增 return 6*po(x,7)+8*po(x,6)+7*po(x,3)+5*x*x-y*x; } int main() { int T; scanf("%d",&T); while(T--) { scanf("%d",&y); double l=0,r=100; double res=-1; //三分 for(int i=0;i<100;i++) { double lm=2.00*l/3.00+r/3.00; double rm=l/3.00+2.00*r/3.00; if(F(lm)<=F(rm)) { res=lm; r=rm; } else { res=rm; l=lm; } } printf("%.4f\n",F(res)); } return 0; }