hdu 2899

mxy终于学会求函数极值了。

先写一道板子。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef double db;
 4 const db eps = 1e-6;
 5 const db INF = 1e100;
 6 const db delta = 0.98;
 7 int sign(db k){
 8     if (k>eps) return 1; else if (k<-eps) return -1; return 0;
 9 }
10 int cmp(db k1,db k2){return sign(k1-k2);}
11 int t;db y;
12 db get(db x){
13     return 6*x*x*x*x*x*x*x+8*x*x*x*x*x*x+7*x*x*x+5*x*x-y*x;
14 }
15 db x[10];
16 db random(){
17     return (rand()&1?1:-1)*rand()*1.0/32767;
18 }
19 void init(){
20     for(int i=0;i<10;i++) x[i]=abs(random())*100;
21 }
22 db sa(){
23     db ans = INF;
24     db t=100;
25     while (t>eps){
26         for(int i=0;i<10;i++){
27             db tmp = get(x[i]);
28             for(int j=0;j<10;j++){
29                 db _x=x[i]+random()*t;
30                 if(cmp(_x,0)>=0&&cmp(_x,100)<=0){
31                     db f = get(_x);
32                     if(tmp>f)
33                         x[i]=_x;
34                 }
35             }
36         }
37         t*=delta;
38     }
39     for(int i=0;i<10;i++)
40         ans=min(ans,get(x[i]));
41     return ans;
42 }
43 
44 int main(){
45     ios::sync_with_stdio(false);
46     scanf("%d",&t);
47     while (t--){
48         scanf("%lf",&y);
49         init();
50         printf("%.4f
",sa());
51     }
52 }
View Code
原文地址:https://www.cnblogs.com/MXang/p/10544651.html