• HDU 2899Strange fuction(模拟退火)


    题意

    题目链接

    求 $F(x) = 6 * x^7+8*x^6+7*x^3+5*x^2-y*x (0 <= x <=100)$的最小值

    Sol

    强上模拟退火,注意eps要开大!

    /*
    */
    #include<iostream>
    #include<cstdio>
    #include<cmath>
    #include<cstdlib>
    #include<ctime>
    using namespace std;
    const int MAXN = 1e6 + 10;
    const double eps = 1e-10, Dlt = 0.98;
    int T;
    double Y, Best;
    double F(double x) {
        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;
    }
    double getrand(double T) {
        return T * ((rand() << 1) - RAND_MAX);
    }
    double solve(int id) {
        double x = id, now = F(x);
        Best = min(Best, now);
        for(double T = 101; T > eps; T *= Dlt) {
            double wx = x + getrand(T), wv = F(wx);
            if(wx > eps && (wx - 100 <= eps)) {
                if(wv < Best) x = wx, Best = wv, now = wv;
                if(wv < now || ((exp((wv - now) / T)) * RAND_MAX < rand())) now = wv, x = wx;
            }
        }
    }
    int main() {
    srand((unsigned)time(NULL));
        scanf("%d", &T);
        while(T--) {
            
            Best = 1e20;
            scanf("%lf", &Y);
            int times = 100;
            while(times--) solve(times);
            printf("%.4lf
    ", Best);
        }    
        return 0;
    }
    /*
    3
    100
    200
    1000000000
    */
  • 相关阅读:
    linux时间格式化
    mysql5.7 安装版安装
    mac下面安装多个JDK
    linux一台机器文件传到另一台机器上
    取模运算
    【UVALive 7334】Kernel Knights
    【HDU 2604】Queuing
    【CodeForces 577B】Modulo Sum
    【CodeForces 504A】Misha and Forest
    【HDU 2203】亲和串
  • 原文地址:https://www.cnblogs.com/zwfymqz/p/9638496.html
Copyright © 2020-2023  润新知