HDU2899(二分查找+or+模拟退火算法)
这道题其实是利用函数求导,判断求导后的函数是否大于零或者小于零,等于零情况,从而判断原函数的单调性,代入X求出函数的最小值。
模拟退火算法:
方法一:二分
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
const double esp=1e-8;
double y;
double f(double x){return 6*pow(x,7)+8*pow(x,6)+7*pow(x,3)+5*pow(x,2)-y*x;
}
double f_1(double x){return 42*pow(x,6)+48*pow(x,5)+21*pow(x,2)+10*x-y;
}
int main(){double x=0;int t;scanf("%d",&t);while(t--){scanf("%lf",&y);if(f_1(100.0)<=0){printf("%.4lf\n",f(100.0));continue;}else{double mid=0.0;double left=0.0,right=100.0;while((right-left)>=esp){mid=(left+right)/2;if(f_1(mid)<0){left=mid;}else{right=mid;}}printf("%.4lf\n",f(mid));}}return 0;
}
方法二:模拟退火算法
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<ctime>
#define esp 1e-11
#define T 0.997
using namespace std;
const int inf=0x3f3f3f3f;
const int maxx=105;
double y;
double FX1(double x){return x*x*x*x*x*x*x;
}
double FX2(double x){return x*x*x*x*x*x;
}
double FX(double x){return 6*FX1(x)+8*FX2(x)+7*(x*x*x)+5*x*x-y*x;;
}
double gd(double x){return (rand()*2-RAND_MAX)*x;
}
double ans;
double px;
void solve(double t){double x0=px,x;double pr=ans;while(t>esp){x=x0+gd(t);if(x>100)x=100;if(x<0)x=0;double ep=FX(x);if(ep<pr||exp((-ep+pr)/t)>rand()/((double)(RAND_MAX))){if(ans>ep){ans=ep;px=x;}x0=x;pr=ep;}t*=T;}
}
int main(){int t;srand(time(0));scanf("%d",&t);while(t--){scanf("%lf",&y);px=50;ans=FX(px);for(int i=1;i<=2;i++){solve(10000);}printf("%.4lf\n",ans);}return 0;
}
HDU2899(二分查找+or+模拟退火算法)相关推荐
- 【二分查找延伸--实际算法应用】数组类题目
声明:博主是基于labuladong微信公众号文章模板驱动刷题,进行的自我刷题感悟和记录在此. 模板详情见labuladong微信公众号文章文末:原创于自己在此基础上的笔记.感悟.整合其它文献和自己的 ...
- java二分查找法_java算法之二分查找法的实例详解
java算法之二分查找法的实例详解 原理 假定查找范围为一个有序数组(如升序排列),要从中查找某一元素,如果该元素在此数组中,则返回其索引,否则返回-1.通过数组长度可取出中间位置元素的索引,将其值与 ...
- 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
文章目录 0.前言 1.功能 2.示例 有两个名单tinyW.txt和tinyT.txt,将tinyT.txt名单中不在tinyW.txt的数据打印出来 ① 实现原理 ② 实现代码 ③ 性能分析 0. ...
- 七十六、Python | Leetcode二分查找和分治算法系列
@Author:Runsen @Date:2020/7/4 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- codeforces 贪心+优先队列_算法基础04-深度优先搜索、广度优先搜索、二分查找、贪心算法...
深度优先搜索DFS.广度优先搜索BFS 比较 拿谚语打比方的话,深度优先搜索可以比作打破砂锅问到底.不撞南墙不回头:广度优先搜索则对应广撒网,多敛鱼 两者没有绝对的优劣之分,只是适用场景不同 当解决方 ...
- python 二分查找_LeetCode基础算法题第120篇:二分查找算法
技术提高是一个循序渐进的过程,所以我讲的leetcode算法题从最简单的level开始写的,然后> 到中级难度,最后到hard难度全部完.目前我选择C语言,Python和Java作为实现语言,因 ...
- 深度搜索和广度搜索领接表实现_算法基础04-深度优先搜索、广度优先搜索、二分查找、贪心算法...
深度优先搜索DFS.广度优先搜索BFS 比较 拿谚语打比方的话,深度优先搜索可以比作打破砂锅问到底.不撞南墙不回头:广度优先搜索则对应广撒网,多敛鱼 两者没有绝对的优劣之分,只是适用场景不同 当解决方 ...
- 二分查找、分治算法——汉诺塔问题
一.二分查找算法(非递归) 1)二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后在进行查找 2)二分查找算法的运行时间为对数时间,即查找到需要的目标位置最多只需要log以2为 ...
- 二分查找的迭代算法和递归算法
package org.sxt.c; /** 二分查找* 迭代方法* 递归方法* */public class BinarySearch {public static int binarySearch ...
最新文章
- 华为自动驾驶实车实路测试视频曝光!徐直军:比特斯拉好多了
- 双线路切换-冗余备份实验
- 【OpenCV 例程200篇】77. OpenCV 实现快速傅里叶变换
- 多容器,Nginx容器灵活切换PHP版本!同时运行多个PHP容器
- (转)Spring使用AspectJ进行AOP的开发:注解方式
- C++友元函数简单示例
- 【安装包】WinSCP
- Windows版JMeter下载安装
- 六石编程学:如何整合两个项目的代码
- 数字冰雹智慧城市大数据可视化分析决策系统
- IDEA中下载mybatis插件mybatis plugins 离线版安装
- ArcCatalog导出数据库中shapefile
- jquery ajax 回调函数里面再执行ajax函数,jQuery AJAX 和其回调函数
- 英文文献调研方法综述
- sun存储的串口连接管理_修改SUN设备管理IP的步骤
- 报销差率费与会计借贷理解
- 【线代NumPy】第五章 - 行列式课后练习 | 伴随矩阵求逆 | Cramer公式求联立方程 | 简述并提供代码
- linux 存储映射lun 给_LINUX系统下添加映射存储LUN
- HI3559A系统卡死问题-修复
- seo模拟点击软件_SEO快排