BZOJ 1915 [Usaco2010 Open]奶牛的跳格子游戏

摘要:
BZOJ_1915如果我们将一对相邻的通过格视为研究对象,那么相邻研究对象之间的距离不应超过K,相邻研究对象间的所有正格都可以在向前跳跃的过程中通过。抽象成这样的模型后,我们可以使用单调队列+dp来找到位置i处最后一个研究对象的最优解。此时,在向前跳的过程中,有可能通过最右侧的一些不超过K-1的正格。最后,扫描dp的最优解并将这些格相加。

BZOJ_1915

    如果我们把一对相邻的来去经过的格子看成一个研究对象的话,那么相邻研究对象之间距离不超过K,而且相邻研究对象之间所有正数的格子都可以在向前跳的过程中经过。抽象成这样的模型之后就可以用单调队列+dp搞定最后一个研究对象在位置i时的最优解。这时由于在向前跳的过程中还可能经过最右边研究对象的右边的一些距离不超过K-1的正数的格子,最后扫一遍dp出的最优解,将这些格子一并加起来即可。

#include<stdio.h>
#include<string.h>
#include<algorithm>
#define MAXD 250010
#define inf 0xc3c3c3c3c3c3c3c3ll
typedef long long LL;
int a[MAXD], N, K, q[MAXD];
LL A[MAXD], dp[MAXD];
void init()
{
    A[0] = 0;
    for(int i = 1; i <= N; i ++)
    {
        scanf("%d", &a[i]);
        A[i] = A[i - 1];
        if(a[i] > 0) A[i] += a[i];
    }
}
void solve()
{
    if(K == 1)
    {
        printf("%d\n", std::max(0, a[1]));
        return ;
    }
    int front = 0, rear = 0;
    memset(dp, 0xc3, sizeof(dp[0]) * (N + 1));
    dp[0] = 0;
    for(int i = 2; i <= N; i ++)
    {
        while(front < rear && dp[q[rear - 1]] - A[q[rear - 1]] <= dp[i - 2] - A[i - 2]) -- rear;
        q[rear ++] = i - 2;
        while(front < rear && q[front] < i - K) ++ front;
        dp[i] = dp[q[front]] + a[i] + a[i - 1] + A[i - 2] - A[q[front]];
    }
    LL ans = std::max(0ll, A[K]);
    for(int i = 1; i <= N; i ++)
    {
        int j = std::min(N, i + K - 1);
        ans = std::max(ans, dp[i] + A[j] - A[i]);
    }
    printf("%lld\n", ans);
}
int main()
{
    while(scanf("%d%d", &N, &K) == 2)
    {
        init();
        solve();
    }
    return 0;
}

免责声明:文章转载自《BZOJ 1915 [Usaco2010 Open]奶牛的跳格子游戏》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇原生js版分页插件图像质量评估 (IQA) 论文笔记: Convolutional Neural Networks for No-Reference Image Quality Assessment下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

bzoj网络流

近期看了一些bzoj的网络流,深感智商不够。不过对于网络流又有了进一步的理解。 还是mark一下吧。 献上几篇论文:1)《最小割模型在信息学竞赛中的应用》                     2)《浅析一类最小割问题》 1、bzoj1066(最大流) 题意:戳这里 思路:很明显拆点最大流模型,然后对于每个点每个高度流量限为1,那么根据最大流即为可以出去...

gcd的性质+分块 Bzoj 4028

4028: [HEOI2015]公约数数列 Time Limit:10 SecMemory Limit:256 MBSubmit:865Solved:311[Submit][Status][Discuss] Description 设计一个数据结构. 给定一个正整数数列 a_0, a_1, ..., a_{n - 1},你需要支持以下两种操作: 1....

Bzoj 2789: [Poi2012]Letters 树状数组,逆序对

2789: [Poi2012]Letters Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 278  Solved: 185[Submit][Status][Discuss] Description 给出两个长度相同且由大写英文字母组成的字符串A、B,保证A和B中每种字母出现的次数相同。 现在每次可以...

[Usaco2010 Mar]gather 奶牛大集会

[Usaco2010 Mar]gather 奶牛大集会 题目 Bessie正在计划一年一度的奶牛大集会,来自全国各地的奶牛将来参加这一次集会。当然,她会选择最方便的地点来举办这次集会。每个奶牛居住在 N(1<=N<=100,000) 个农场中的一个,这些农场由N-1条道路连接,并且从任意一个农场都能够到达另外一个农场。道路i连接农场A_i和B...