HDU 2899 (二分&三分_H题)解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2899
-----------------------------------------------------------------------------------
题意: F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)求最小值。
思路:求极值,三分法。
代码:
#include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<string> #include<vector> #include<stack> #include<bitset> #include<cstdlib> #include<cmath> #include<set> #include<list> #include<deque> #include<map> #include<queue> using namespace std; typedef long long ll; const double PI = acos(-1.0); const double eps = 1e-8; double Y; double cal(double x){ return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-Y*x; } double bsearch(){ double left =0; double right =100; double midr=0; double midl=0; while(right-left>=eps){ midl=(left+right)*0.5; midr=(midl+right)*0.5; double cmidl=cal(midl); double cmidr=cal(midr); if(cmidl<cmidr){ right =midr; }else{ left =midl; } } return left; } int main(void){ int T =0; scanf("%d",&T); for(int i=0;i<T;i++){ scanf("%lf",&Y); printf("%.4lf\n",cal(bsearch())); } return 0; }

浙公网安备 33010602011771号