题解 UVA1555 【Garland】(二分)

题面

最近有人问我这个题这么做,光讲几句貌似没什么用,干脆发个题解吧(话说什么有人会来问我这个蒟蒻

题面的意思大概就是说每个点的高度都和旁边2个点有关,整张图没有高度小于0的点,求最后一个点B的最低值

是不是长得像个数学题?所以我们用数学的方法来思考一下Hi怎么得出。

题目中说过,Hi = (H[i?1] + H[i+1])/2-1,也就是已知旁边的2个点,就可以求出中间的点2,因为表达式已知,所以我们可以通过其中2个点求出第3个点。

简单地推一推:设第1个点为a,第2个点为b,第3个点为c,已知a,b。

∵b=(a+c)/2-1;

∴2b+2=a+c

∴2b+2-a=c

这样一来,我们就可以通过前面的点直接推出后面的点了!所以我们就只需要找出使B最低并且每个点都>=0的第2个点就可以了qwq

现在我们已经知道了B点的高度和第2点相关了,但是要求出B的最低的值,该怎么确定第2个点的值呢?

遇到这种在条件中求最值问题,首先想到的肯定是二分。因为二分可以不断地缩小查找范围,最终缩小到不满足条件与满足条件之间,也就是最小的值了。

细节部分直接看代码:

#include<bits/stdc++.h>
using namespace std;
const double mina=1e-6;
int n;
double a,l,r,mid,lp[1010];
bool judge(double x)//每次二分暴力的判断一下是否有点小于0
{
    lp[1]=a;
    lp[2]=x;
    for(int i=3;i<=n;i++)
    {
        lp[i]=2*lp[i-1]-lp[i-2]+2;
        if(lp[i]<0)return false;
    }
    return true;
}
int main()
{

    while(scanf("%d%lf",&n,&a)!=EOF)//这句话记住就好,貌似只在洛古上有用(哪位大佬告诉我是不是Linux的原因)
    {
        for(int i=0;i<=1009;i++)lp[i]=0.00;
        l=a/2-1;//这里可以优化一下二分的范围,因为这个值刚好使第3个点为0
        r=a;//随便设个高一点的值即可
        while(r-l>mina)//保证精度
        {
            mid=(l+r)/2;
            if(judge(mid)==true)r=mid;//满足的话就可以再小一点
            else l=mid;//不满足的话就增大
        }
        printf("%0.2lf\n",fabs(lp[n]));
        getchar();//读走回车
    }
return 0;
}//看懂了记得点赞QWQ

原文地址:https://www.cnblogs.com/Hdgs3-blog/p/10327668.html

时间: 2024-10-14 12:03:35

题解 UVA1555 【Garland】(二分)的相关文章

【题解整理】二分题

[题解整理]二分题 题目类型: 二分查找: 二分答案. 大致解题思路: 查找注意有序和返回值: 浮点数注意精度: 整数注意返回值,建议另外维护一个变量,用于储存可行解. 题目 分类 传送门 WA点 poj 2785 二分查找 题解 lightoj 1088 二分查找 题解 lightoj 1307 二分查找 题解 longlong poj 2456 整数二分答案 题解 poj 3104 整数二分答案 题解 poj 3258 整数二分答案 题解 poj 3273 整数二分答案 题解 lightoj

题解——dinner(二分+倍增)

题解--dinner(二分+倍增) 见ssw02的:题解--慕斯蛋糕 好像这道题 二分+二分+贪心 也可以.(日后更,T3还没改) 如有不足,请大佬指出 原文地址:https://www.cnblogs.com/ssw02/p/11394142.html

POJ1759 Garland —— 二分

题目链接:http://poj.org/problem?id=1759 Garland Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 2477   Accepted: 1054 Description The New Year garland consists of N lamps attached to a common wire that hangs down on the ends to which outermo

POJ 1759 Garland(二分+数学递归+坑精度)

POJ 1759 Garland  这个题wa了27次,忘了用一个数来储存f[n-1],每次由于二分都会改变f[n-1]的值,得到的有的值不精确,直接输出f[n-1]肯定有问题. 这个题用c++交可以过,g++交过不了, f[i]=2+2*f[i-1]-f[i-2]; f[0]=A,f[1]=x; 二分枚举x的值,最终得到B的值(不是f[n-1]), 上述递推式是非齐次的二阶递推式,解其齐次特征方程,可以得到f[n-1]的齐次时的表达式,对于非齐次的,目前我还没法求出通式, B与f[n-1]的关

【题解】SOFTWARE 二分+搜索/dp

题目描述 一个软件开发公司同时要开发两个软件,并且要同时交付给用户,现在公司为了尽快完成这一任务,将每个软件划分成m个模块,由公司里的技术人员分工完成,每个技术人员完成同一软件的不同模块的所用的天数是相同的,并且是已知的,但完成不同软件的一个模块的时间是不同的,每个技术人员在同一时刻只能做一个模块,一个模块只能由一个人独立完成而不能由多人协同完成.一个技术人员在整个开发期内完成一个模块以后可以接着做任一软件的任一模块.写一个程序,求出公司最早能在什么时候交付软件. 输入输出格式 输入格式: 输入

【bzoj4310】跳蚤 后缀数组+二分

题目描述 很久很久以前,森林里住着一群跳蚤.一天,跳蚤国王得到了一个神秘的字符串,它想进行研究. 首先,他会把串分成不超过 k 个子串,然后对于每个子串 S,他会从S的所有子串中选择字典序最大的那一个,并在选出来的 k 个子串中选择字典序最大的那一个.他称其为“魔力串”. 现在他想找一个最优的分法让“魔力串”字典序最小. 输入 第一行一个整数 k. 接下来一个长度不超过 105 的字符串 S. 输出 输出一行,表示字典序最小的“魔力串”. 样例输入 13 bcbcbacbbbbbabbacbcb

hdu5884 Sort(二分+k叉哈夫曼树)

题目链接:hdu5884 Sort 题意:n个有序序列的归并排序.每次可以选择不超过k个序列进行合并,合并代价为这些序列的长度和.总的合并代价不能超过T, 问k最小是多少. 题解:先二分k,然后在k给定的情况下,构造k叉哈夫曼树.O(nlogn)的做法:先对所有数排序,另外一个队列维护合并后的值,取值时从两个序列前端取小的即可. 注:如果(n-1)%(k-1)!=0,那么就要增加(k-1-(n-1)%(k-1))个权值为0的叶子节点作虚拟点. 1 #include<cstdio> 2 #inc

算法复习——欧拉回路混合图(bzoj2095二分+网络流)

题目: Description YYD为了减肥,他来到了瘦海,这是一个巨大的海,海中有n个小岛,小岛之间有m座桥连接,两个小岛之间不会有两座桥,并且从一个小岛可以到另外任意一个小岛.现在YYD想骑单车从小岛1出发,骑过每一座桥,到达每一个小岛,然后回到小岛1.霸中同学为了让YYD减肥成功,召唤了大风,由于是海上,风变得十分大,经过每一座桥都有不可避免的风阻碍YYD,YYD十分ddt,于是用泡芙贿赂了你,希望你能帮他找出一条承受的最大风力最小的路线. Input 输入:第一行为两个用空格隔开的整数

UVALive 4223 / HDU 2962 spfa + 二分

Trucking Problem Description A certain local trucking company would like to transport some goods on a cargo truck from one place to another. It is desirable to transport as much goods as possible each trip. Unfortunately, one cannot always use the ro