题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=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.

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

Just the minimum value (accurate up to 4 decimal places),when x is between 0 and 100.

Sample Input

2
100
200

Sample Output

-74.4291
-178.8534

题目翻译

给定了一个函数(包含两个未知数),每次给你一个未知数的值,求这个函数的最小值。

经典的二分题,不过也可以用模拟退火去求

思路也很清楚,先随机生成一些数据,之后再对这个数据进行小修改,不断更新最小值。

跟暴力差不多,就是更强了一点,玄学过。

#include <iostream>
#include <string.h>
#include <stdlib.h>
#include <algorithm>
#include <stdio.h>
#include <time.h>
#include <math.h>
#define ITERS 10
#define T 100
#define eps 1e-8
#define delta 0.98
#define INF 1e99
using namespace std;
double x[ITERS];
int Judge(double x, double y)
{if(fabs(x - y) < eps) return 0;return x < y ? -1 : 1;
}
double Random()
{double x = rand() * 1.0 / RAND_MAX;if(rand() & 1) x *= -1;return x;
}
double F(double x, double y)
{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;
}
void Init()
{for(int i = 0; i < ITERS; i++)x[i] = fabs(Random()) * 100;
}
double SA(double y)
{double ans = INF;double t = T;while(t > eps){for(int i = 0; i < ITERS; i++){double tmp = F(x[i], y);for(int j = 0; j < ITERS; j++){double _x = x[i] + Random() * t;if(Judge(_x, 0) >= 0 && Judge(_x, 100) <= 0){double f = F(_x, y);if(tmp > f) x[i] = _x;}} }t *= delta;}for(int i = 0; i < ITERS; i++)ans = min(ans, F(x[i], y));return ans;
}
int main()
{int t;scanf("%d", &t);while(t--){double y;scanf("%lf", &y);srand(time(NULL));Init();printf("%.4lf\n", SA(y));}return 0;

hdu2899——函数最值问题(模拟退火)相关推荐

  1. 求函数最值(模拟退火算法C++实现)

    #include <cmath> #include <iostream> #include <time.h> #include <vector> usi ...

  2. 模拟退火算法实现寻找函数最值

    模拟退火的算法思想: 模拟退火算法从某一较高初温出发,伴随温度参数的不断下降,结合概率突跳特性在解空间中随机寻找目标函数的全局最优解,即在局部最优解能概率性地跳出并最终趋于全局最优. 模拟退火算法模板 ...

  3. C++ 笔记(15)— 引用(声明引用、引用作为参数、引用作为函数返回值、const 用于引用)

    引用是变量的别名.也就是说,它是某个已存在变量的另一个名字.一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量. 1. 创建引用 要声明引用,可使用引用运算符 & ,如下面的 ...

  4. C++ 笔记(02)— 程序结构(头文件说明、命名空间、函数返回值、函数参数、注释、语句结束符、cin/cout)

    先看以下代码 #include <iostream> #include <string> using namespace std;int main() // main() 是程 ...

  5. C指针7:指针作为函数返回值

    C语言允许函数的返回值是一个指针(地址),我们将这样的函数称为指针函数.下面的例子定义了一个函数 strlong(),用来返回两个字符串中较长的一个: #include <stdio.h> ...

  6. 使用指针做函数返回值

    使用指针做函数返回值 1.当使用指针做为函数的返回值时,主函数处的char *p;将获得调用函数char *pf;的值,即一个地址值,如oxAE72.此时需要我们注意的是该地址值所指向的空间是否存在( ...

  7. python函数用法详解2(变量的作用域(全局变量、局部变量)、共享全局变量、函数返回值、函数的参数(位置参数、关键字参数、默认参数、不定长参数)、拆包、交换变量值、引用、可变和不可变类型)

    1. 变量作⽤域         变量作⽤域指的是变量⽣效的范围,主要分为两类:局部变量和全局变量. 局部变量         定义在函数体内部的变量,即只在函数体内部⽣效. def testA(): ...

  8. python函数的用法详解(作用、定义、调用、函数参数、函数返回值、函数说明文档、函数嵌套使用)

    1. 函数的作⽤ 函数就是将⼀段具有独⽴功能的代码块整合到⼀个整体并命名,在需要的位置调⽤这个名称即可完成对应的需求. 函数在开发过程中,可以更⾼效的实现代码重⽤. 2. 函数的使⽤步骤 2.1 定义 ...

  9. HDU2899(二分查找+or+模拟退火算法)

    这道题其实是利用函数求导,判断求导后的函数是否大于零或者小于零,等于零情况,从而判断原函数的单调性,代入X求出函数的最小值. 模拟退火算法: 方法一:二分 #include<stdio.h> ...

最新文章

  1. leetcode算法题--最长湍流子数组
  2. vc++ 将可执行文件链接到 DLL
  3. 信息系统项目管理知识--项目成本管理
  4. salt-ssh的使用(不需要安装客户端)
  5. java项目遇到的问题_java系列:项目中遇到的一些问题(持续更新中)
  6. 网站运维都需要做什么工作
  7. 【无线通信协议笔记】蓝牙篇:传输速率
  8. SQL注入(持续更新中)
  9. codesys 轴程序
  10. 态度决定一切《跟任何人都聊得来》
  11. 【机器学习】对数线性模型之Logistic回归、SoftMax回归和最大熵模型
  12. BI规划落地的正确姿势,五步教你搭建企业级BI项目
  13. 北京大学可视化发展前沿研究生暑期学校Day1
  14. 毕业后距离就这样慢慢拉开的
  15. java解决拼音多音字问题
  16. NASA开始调试校准韦伯望远镜18面金色镜子,需三个月
  17. VUE整合信通身份证阅读器返回读取到的数据或将身份证图片返回
  18. 2023,再转行去做软件测试还有前途吗?
  19. 原生七彩影视APP源码 支持PC+WAP+APP三端
  20. 永不止步,南卡新品Runner Pro3上市,刷新最高配置

热门文章

  1. WIN10下OpenCV3.4.10安装+opencv-python调用海康威视摄像头
  2. 框架学习——带你了解SpringBoot框架
  3. 尾插法建立单链表,并输出链表
  4. 建筑建材行业渠道商管理系统助力企业掌控市场信号,提速业务决策
  5. 真正标准,规范的企业网站建设合同书
  6. sql 每小时的温度平均值
  7. 网络经济学期末复习——第一章 导论
  8. react+ts导入图片,找不到模块“......logo.png”或其相应的类型声明。
  9. linux下解决ppa...(软件)Release 404 Not Found [IP: 91.189.95.83 80]的问题
  10. Vue2+Vue3的专题目录结构(第二十三课)