`

【三分】HDU 2241 考研路茫茫——早起看书

阅读更多
KIDx 的解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2241

解题思路:
由题意得:【设题目所给m个点存放到点结构p[m]中】
F = n/(x^2)
设Y是第i-1个点跟第i个点连线的方程【设k是这2点连线的斜率】
则:【根据题目:i<j Xi<Xj 且 Yi<=Yj】
Y = k * (x-p[i-1].x) + p[i-1].y
设总的函数 = Z
Z = Y + F = n/(x^2) + k * (x-p[i-1].x) + p[i-1].y

即:Z = n/(x^2) + k*x + (p[i-1].y - k*p[i-1].x)
由于点已经给出,所以绿色部分为常数部分,不会影响函数单调性
∴可以提出来,不用放到代码中Z函数内,因为三分里要运行很多次Z函数,这样无意中就增加了运行时间


如图:
简单联想可知对于第k段来说,Z函数有可能是单调的,也有可能是先减后增的函数,但是对于(0,+无穷)来说,Z函数可能有多个极值,所以必须分段【可以从分段函数的角度理解】进行三分求最小值

#include <iostream>
using namespace std;
#define eps 1e-4
#define M 10005
const double inf = 1e100;    //定义无穷大

int n, m;
struct point{
    int x, y;
}p[M];

double Z (double x, double k) {return n/(x*x) + k*x;}

int main()
{
    int i;
    double l, r, mid1, mid2, mins, tp1, tp2;
    while (~scanf ("%d%d", &m, &n))
    {
        for (i = 0; i < m; i++)
			scanf ("%d%d", &p[i].x, &p[i].y);
        mins = inf;
        for (i = 1; i < m; i++)    //分段求解
        {
            l = p[i-1].x, r = p[i].x;
			double k = (p[i].y - p[i-1].y + 0.0) / (p[i].x - p[i-1].x);//求斜率
            while (r - l > eps)    //三分逼近函数极值
            {
                mid1 = l + (r-l)/3;
                mid2 = r - (r-l)/3;
                tp1 = Z (mid1, k);
                tp2 = Z (mid2, k);
                if (tp1 > tp2)
                    l = mid1;
                else r = mid2;
            }
			tp1 += p[i-1].y - k*p[i-1].x;    //把常数加上
            if (mins > tp1) mins = tp1;    //更新最小值
        }
        printf ("%.3f\n", mins);
    }
    return 0;
}
  • 大小: 8.1 KB
  • 大小: 166.7 KB
1
0
分享到:
评论

相关推荐

    算法设计与分析实验六:使用动态规划算法解决存钱问题(java实现、hdu1114)(csdn)————程序.pdf

    在这个实验中,主要的目标是通过动态规划算法来解决一个实际问题——如何在不打破存钱罐的情况下,找到装满存钱罐所需的最小金额。实验使用Java语言进行实现,并且是针对HDU 1114题目的解决方案。 动态规划是一种...

    HDU——ACM.zip

    【HDU——ACM.zip】压缩包文件是一个专门为准备ACM(国际大学生程序设计竞赛)集训而设计的资源集合,包含了多个关键算法领域的详细讲解。这个资源包旨在帮助参赛者提升算法理解与编程能力,涵盖了多项在算法竞赛中...

    ACM HDU题目分类

    ACM HDU 题目分类 ACM HDU 题目分类是指对 HDU 在线判题系统中题目的分类,总结了大约十来个分类。这些分类将有助于编程选手更好地理解和解决问题。 DP 问题 DP(Dynamic Programming,动态规划)是一种非常重要...

    hdu.rar_hdu

    压缩包内的文件名“朝花夕拾——hdu”可能表示这是一系列关于HDU题目的代码记录,"朝花夕拾"是一个成语,意味着回忆过去的事情,这里可能是暗示这些代码是作者在过去解决HDU题目时留下的,现在整理出来分享或复习。...

    浙江大学 计算机考研复习 HDU结题报告及ACM课件

    本资料包,名为“浙江大学计算机考研复习 HDU结题报告及ACM课件”,汇聚了丰富的学习资源,旨在帮助备考者高效复习,提升机试复试的能力,让学习之路更为顺畅。 一、HDU解题报告——算法实践的黄金指南 HDU(杭州...

    HDU_2010.rar_hdu 2010_hdu 20_hdu acm20

    "hdu"可能是指杭州电子科技大学(Hangzhou Dianzi University),这所学校经常举办ACM编程竞赛,并有自己的在线判题系统——HDU Online Judge,供参赛者提交代码并测试解决方案。 【压缩包子文件的文件名称列表】中...

    HDU图论题目分类

    HDU图论题目分类 HDU图论题目分类是指在杭州电子科技大学(Hangzhou Dianzi University)的判题平台HDU OJ(Online Judge)上收录的一系列图论题目的分类。本分类涵盖了图论领域的多种类型的题目,涉及到图论的基本...

    HDU题目java实现

    【标题】"HDU题目java实现"所涉及的知识点主要集中在使用Java编程语言解决杭州电子科技大学(HDU)在线评测系统中的算法问题。HDU是一个知名的在线编程竞赛平台,它提供了大量的算法题目供参赛者练习和提交解决方案...

    hdu1250高精度加法

    ### hdu1250高精度加法 #### 背景介绍 在计算机科学与编程竞赛中,处理大整数运算(特别是加法、减法、乘法等)是常见的需求之一。当数字的位数超过了标准数据类型(如`int`、`long`等)所能表示的最大值时,就需要...

    hdu题目分类

    在IT领域的编程竞赛中,HDU(HaoDong University)OJ(Online Judge)是一个备受推崇的在线编程平台,提供了大量的算法问题供参赛者挑战和学习。根据给定文件的信息,我们可以深入探讨HDU ACM题目分类中的几个关键...

    HDU DP动态规划

    【标题】"HDU DP动态规划"涉及到的是在算法领域中的动态规划(Dynamic Programming,简称DP)技术,这是解决复杂问题的一种高效方法,尤其适用于有重叠子问题和最优子结构的问题。动态规划通常用于优化多阶段决策...

    HDU1059的代码

    HDU1059的代码

    hdu1001解题报告

    hdu1001解题报告

    hdu 1574 passed sorce

    hdu 1574 passed sorce

    Hello_HDU:杭州电子科技大学计算机考研信息汇总杭电考研HDU考研 by 张天宇

    杭州电子科技大学计算机考研信息汇总 作者: GitHub:ztygalaxy GitHub Pages: 适用报考范围: 杭电计算机学院计算机相关专业,不定期更新 本系列只在GitHub不定期更新,其他平台非本人维护或停止维护,转载请标明...

    hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj

    【标题】"hdu.rar_HDU 1089.cpp_OJ题求和_hdu_horsekw5_杭电obj" 提供的信息是关于一个压缩文件,其中包含了一个名为 "HDU 1089.cpp" 的源代码文件,这个文件是为了解决杭州电子科技大学(Hangzhou Dianzi ...

    hdu2101解决方案

    hdu2101AC代码

Global site tag (gtag.js) - Google Analytics