模拟退火 HDU - 2899 Strange Function
Strange Function
题目大意:
函数 F(x) = 6x7 + 8x6 + 7x3 + 5x2 - yx, 其中x的范围是0 ≤ x ≤ 100.
输入y值,输出F(x)的最小值
模拟退火算法
模拟退火就是类似于物体降温的概率,来进行多次搜索迭代
在迭代过程中,模拟退火算法随机选择下一个状态,有两种可能
- 新状态比原来状态更优,那么接受这个新状态
- 新状态更差,那么以一定的概率接受该状态,不过这个概率应该随着时间的推移逐渐降低
模拟退火算法的主要步骤如下:
- 设置一个初始的温度T
- 温度下降,状态转移。从当前温度按降温系数下降到下一个温度,在新的温度计算当前状态
- 如果温度降到设定的温度下界,程序停止
题解代码
#include<bits/stdc++.h>
using namespace std;const double eps = 1e-8; // 终止温度double y;
double func(double x) // 计算函数值
{return 6 * pow(x, 7.0) + 8 * pow(x, 6.0) + 7 * pow(x, 3.0) + 5 * pow(x, 2.0) - y * x;
}double solve(void)
{double T = 100; // 初始温度double delta = 0.98; // 降温系数double x = 50.0; // x的初始值double now = func(x); // 计算初始函数值double ans = now; // 返回值while (T > eps) {int f[2] = {1, -1};double newx = x + f[rand() % 2] * T; // 按概率改变x,随t的降温而减少if (newx >= 0 && newx <= 100) {double next = func(newx);ans = min(ans, next);if (now - next > eps) {x = newx;now = next;}}T *= delta;}return ans;
}int main(void)
{int cas;scanf("%d", &cas);while (cas--) {scanf("%lf", &y);printf("%.4lf\n", solve());}return 0;
}
模拟退火 HDU - 2899 Strange Function相关推荐
- Tutorial of Codeforces Round 729 (Div.2) C. Strange Function
C. Strange Function 题意 定义一个f(x)为最小的正整数使这个正整数不被x整除,给出一个正整数n,1<=n<=1e16,让求 ∑ i = 1 n f ( i ) \su ...
- CF1542C Strange Function
CF1542C Strange Function 原题链接 题意: 这里f[i]表示不是i因子的最小数.比如f[1]=2,f[2]=3,f[3]=2- 题目给一个n,求出 ∑ i = 1 n \sum ...
- hdu 2988 Strange fuction【模拟退火】
计算:给出y , 的最小值 wa到哭啊,简直上火了,是板子没有套对, nex=now+T*i;//新解 T*i是变化的范围加上原先的才是新解, 还有精确度,因为评估函数要平方,所以要高一些 最终 ...
- 【HDU - 2899】 Strange fuction(二分或三分,求导)
题干: 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 fi ...
- HDU 6156 Palindrome Function 数位DP
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6156 题目描述: 求L~R所有的数的l~r进制的f(x), f(x) = 当前进制 如果回文串, f ...
- 【HDU - 5875】Function(线段树,区间第一个小于某个数的数 或 RMQ二分)
题干: The shorter, the simpler. With this problem, you should be convinced of this truth. You a ...
- HDU A strange lift
A strange lift Time Limit : 2000/1000ms (Java/Other) Memory Limit : 65536/32768K (Java/Other) Tota ...
- hdu 5597GTW likes function(欧拉函数)
题目链接:[hdu 5597] f(n)=sum((-1)^k * 2^(2n-2k) * C(k, 2n-k+1)) 0<=k<=n 这个公式化简之后就是f(x) = x+1 简单证 ...
- hdu 2824The Euler function
题目链接 快速求出a到b之间所有数的欧拉函数. 一个一个求肯定是不行的, 我们知道欧拉函数的公式为phi(n) = n*(1-1/i1)*(1-1/i2).......i1, i2为素因子. 那么我们 ...
最新文章
- 【opencv】(6) 图像轮廓处理
- 用C语言解“爬动的蠕虫”题
- eclipse集成tomcat运行web时提示引入jar包的类找不到的解决办法
- ORCFILE,ParquetFile,CubeFile使用场景区别
- Transformer 模型详解
- java读取 png_如何让java的ImageBuffer正确读取PNG文件?
- C++默认构造函数的一点说明
- myeclipse导入maven工程
- 频率计设计——电路部分
- 【Linux】一步一步学Linux——egrep命令(50)
- myeclipse2013 jad反编译插件安装
- 【转】 Pro Android学习笔记(八一):服务(6):复杂数据Parcel
- 阿里巴巴confont项目的使用
- oracle触发器和存储过程的格式
- 用Scrapy框架爬取校花网所有校花图片
- SpringBoot优雅停机的正确姿势!
- 【paper-note4】Reconfiguring the Imaging Pipeline for Computer Vision
- 每个人心中都是有那一颗朱砂痣,不是美人却是美食
- SharePoint 2010 类似人人网站内信功能实施
- Vuex框架原理与源码分析