题意:计算F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)的最小值
分析:求导发现0~100内为凹函数,那么可以直接二分导数或者三分原函数,
这里写一下模拟退火的做法,每次左右找到较低函数值并转移x,控制一下精度,和二分三分差不多,
只是写法不一样。
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<cstdio>
#include<algorithm>
#include<map>
#include<cstdlib>
#include<cmath>
#include<vector>
//#pragma comment(linker, "/STACK:1024000000,1024000000");
using namespace std;
#define INF 0x3f3f3f3f
double y;
double getsum(double x)
{
return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*x*x-y*x;
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
scanf("%lf",&y);
double delte=0.98;
double t=100;
double x=0;
double ans=g