一本通 1434:【例题2】Best Cow Fences

Best Cow Fences

二分答案 + 前缀和

个人认为题意没有表述清楚,本题要求的是满足题意的连续子序列(难度大大降低了有木有)。

本题的精度也是非常令人陶醉,请您自行体会吧!

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
//Mystery_Sky
//
#define M 10000100
#define ex 1e-5
double l = 100000.0, r = -10000.0, mid;
int n, L;
double a[M], sum[M];
inline bool check(double ans)
{
    double sum1, sum2, maxx;
    sum1 = sum[L-1] - (L-1) * ans;
    for(int i = L; i <= n; i++) {
        sum2 = sum[i] - sum[i - L] - L * ans;
        sum1 = sum1 + a[i] - ans;
        sum1 = max(sum1, sum2);
        if(sum1 > -ex) return true;
    }
    return false;
}

int main() {
    scanf("%d%d", &n, &L);
    for(int i = 1; i <= n; i++) {
        scanf("%lf", &a[i]);
        sum[i] = sum[i-1] + a[i];
        l = min(l, a[i]), r = max(r, a[i]);
    }
    while(r - l > ex) {
        mid = (l + r)/2;
        if(check(mid)) l = mid;
        else r = mid;
    }
    int ans = (int)(r * 1000);
    printf("%d", ans);
    return 0;
}

原文地址:https://www.cnblogs.com/Benjamin-cpp/p/10878188.html

时间: 2024-10-12 10:37:37

一本通 1434:【例题2】Best Cow Fences的相关文章

POJ 2018 Best Cow Fences

斜率优化DP...<浅谈数形结合思想在信息学竞赛中的应用 安徽省芜湖一中 周源>例题... Best Cow Fences Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 9311   Accepted: 2986 Description Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field c

POJ2018 Best Cow Fences

Best Cow Fences Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 11175   Accepted: 3666 Description Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <

POJ 2018 Best Cow Fences(二分答案)

POJ 2018 Best Cow Fences(二分答案) Best Cow Fences Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 12144 Accepted: 3958 Description Farmer John's farm consists of a long row of N (1 <= N <= >100,000)fields. Each field contains a certain nu

poj 动态规划DP - 2018 Best Cow Fences

这道题目我一开始的思路是用二维DP,结果TLE了.后来换了个思路,终于AC了. 不需要判断所有的情况,我们用dp[i]表示前i个牛圈中最大的牛数,而这个i首先必须>=限制的牛圈树f.用num[i]表示dp[i]中包含了多少牛圈. 我们可以知道,dp[i] = sum[i] - sum[i-f])/f  or  dp[i-1] + data[i], 前一个代表到i为止前f个牛圈的牛数,后一个代表前i-1个牛圈中最大牛数+第i个牛圈中的牛数.其实也就是到i为止前num[i-1]+1个牛圈的牛数.而判

G - Best Cow Fences (POJ - 2018)

- 题目大意 给你n个牛的自身价值,让你找出连续的且数量大于等于F的一段区间,使这段区间内的牛的平均价值最大. - 解题思路 这道题可以用二分法也可以结合前缀数组来求和来做,我就是用前缀数组求和和二分答案法来做的. - 代码 #include <iostream> #include <algorithm> using namespace std; const int maxn = 1e5 + 10; int sum[maxn]; int main() { int n, f, a;

poj2018——Best Cow Fences

Description Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <= 2000. FJ wants to build a fence around a contiguous group of these fields in order to maximize th

POJ2018 Best Cow Fences 二分答案/DP

显然二分答案,然后减去对应的mid,求超过L的最大子段和验证就好了. 当然记录下长度的直接DP也是可以的. 然而二分答案怎么都WA,很好奇为什么 直接输出r反而是能过的. 看了下https://blog.csdn.net/jiangshibiao/article/details/21963437 想起来double取整输出的时候要加上eps 1 https://blog.csdn.net/jiangshibiao/article/details/21963437 原文地址:https://www

Best Cow Fences POJ - 2018

Farmer John's farm consists of a long row of N (1 <= N <= 100,000)fields. Each field contains a certain number of cows, 1 <= ncows <= 2000. FJ wants to build a fence around a contiguous group of these fields in order to maximize the average nu

POJ 2018 Best Cow Fences(二分最大区间平均数)题解

题意:给出长度>=f的最大连续区间平均数 思路:二分这个平均数,然后O(n)判断是否可行,再调整l,r.判断方法是,先求出每个数对这个平均数的贡献,再求出长度>=f的最大贡献的区间,如果这个最大贡献大于0说明这个二分出来的数可行. 代码: #include<set> #include<map> #include<stack> #include<cmath> #include<queue> #include<vector>