专栏首页数据结构与算法HDU 2899 Strange fuction(牛顿迭代)

HDU 2899 Strange fuction(牛顿迭代)

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9333    Accepted Submission(s): 6352

Problem Description

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

Author

Redow

Recommend

lcy   |   We have carefully selected several similar problems for you:  2199 2289 2298 2141 3400

被eps卡好蛋疼啊。。

首先求函数的最大最小值问题可以转化为导数的零点的问题

然后用牛顿迭代求导数零点就行了

eps不能设的太小

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const double eps = 1e-9;
double y;
double fdd(double x) {
    return 252 * pow(x, 5) + 240 * pow(x, 4) + 42 * x + 10;
}
double fd(double x) {
    return 42 * pow(x, 6) + 48 * pow(x, 5) + 21 * pow(x, 2) + 10 * x - 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 Newton(double x) {
    while(fabs(fd(x)) > eps) 
        x = x - fd(x) / fdd(x);
    return x;
}
int main() {
    int QwQ;
    scanf("%d", &QwQ);
    while(QwQ--) {
        scanf("%lf", &y);
        double ans = 1e15, pos;
        for(int i = 0; i <= 100; i++) {
            double anspos = Newton(i);
            if(anspos >= 0 && anspos <= 100) 
                ans = min(ans, f(anspos));
        } 
        printf("%.4lf\n", ans);
    }
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • POJ 2942Knights of the Round Table(tarjan求点双+二分图染色)

    Description Being a knight is a very attractive career: searching for the Holy G...

    attack
  • 1212 最大公约数

    1212 最大公约数  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 白银 Silver 题目描述 Description 求两个数A和...

    attack
  • P1340 兽径管理

    题目描述 约翰农场的牛群希望能够在 N 个(1<=N<=200) 草地之间任意移动。草地的编号由 1到 N。草地之间有树林隔开。牛群希望能够选择草地间的路径,使...

    attack
  • SAP云平台上的Fiori administation工具

    版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.bl...

    Jerry Wang
  • Redis详解(一)------ redis的简介与安装

      工作中一直在用 Redis,但是一直没有进行系统的总结,这个系列的博客将整体的介绍 Redis 的用法。

    IT可乐
  • 想要出专辑、开个唱?试一下 Facebook「歌手变声器」

    去年 6 月份,机器之心报道过,谷歌发布了从声纹识别到多重声线语音合成的迁移学习,利用该技术能够从任意一段参考音频中提取出说话者的声纹信息,并生成与其相似度极高...

    机器之心
  • 史上最复杂的开瓶倒酒器,工程师都看哭了

    话说人们创造发明是为了便利生活 然而下面这个发明 好像有什么不对的样子... ▼ ? 你能看出来 这个精密复杂的机械 只是个单纯的开瓶器吗 ▼ ? 这台开...

    机器人网
  • [IoT迷你赛]基于TencentOS tiny的IoT设备极速上云实践系列

    物联网行业已经发展到各个垂直行业真正落地和商用运营阶段,各大厂都在积极布局和拥抱合作伙伴,在云管端各个环节,建立开放平台,推出一揽子的解决方案,...

    用户4919065
  • 原码、反码、补码的正(nao)确(can)打开方式

      我们知道日常生活中使用的数分为整数和实数,整数的小数点固定在数的最右边,可以省略不写,而实数的小数点则不固定。在计算机中只能识别和表示“0”和“1”,而无法...

    IT可乐
  • 使用Jenkins实现apk打包

    最近小编正在调研如何能够使用持续集成工具进行apk打包,轻轻松松(30余次的血泪教训),就成功完成apk打包任务,在这里分享下Jenkins实现apk打包的一些...

    用户5521279

扫码关注云+社区

领取腾讯云代金券