• 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
    ", ans);
        }
        return 0;
    }
  • 相关阅读:
    IPC之——消息队列
    特殊命令
    面试概念集锦
    守护进程(精灵进程)
    IP SSL HTTPS
    钉钉监控样例
    中间人攻击
    iptables firewalld
    简单暴力高效率的OSM全球地图
    解决ubuntu使用命令sudo apt -get install 安装东西时出现"E: Sub-process /usr/bin/dpkg returned an error code (1) "的错误 问题描述:
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/9149347.html
Copyright © 2020-2023  润新知