美文网首页C++&数据结构与算法
动态规划之灌溉草场

动态规划之灌溉草场

作者: cherryleechen | 来源:发表于2017-10-08 10:13 被阅读10次

问题描述

解题分析

程序实现

# include<iostream>
# include<cstring>
# include<queue>
using namespace std;

const int INFINITE = 1 << 31;
const int MAXL = 1000001;
const int MAXN = 10001;

int l, n, s, e, a, b;

struct id_f
{
    int id;
    int f;
    id_f(int ii, int ff)
    {
        id = ii;
        f = ff;
    }
};

bool operator < (const id_f idf1, const id_f idf2)//在优先级队列里,f值越小的越优先
{
    return idf1.f > idf2.f;
}

int main()
{
    cin >> n >> l;
    cin >> a >> b;
    a <<= 1;//a,b的定义变为覆盖的直径
    b <<= 1;
    int cowsHere[l + 1];
    memset(cowsHere, 0, sizeof(cowsHere));
    for(int i = 0; i < n; i++)
        {
            cin >> s >> e;
            while(s < e)
                {
                    s++;
                    cowsHere[s]++;
                }
            cowsHere[e]--;
        }
    int f[l + 1];
    memset(f, INFINITE, sizeof(f));
    priority_queue<id_f> pq;
    for(int i = a; i < b + 1; i += 2)
        {
            if(cowsHere[i] == 0)
                {
                    f[i] = 1;
                    if(i <= b + 2 - a)
                        pq.push(id_f(i, f[i]));
                }
        }
    for(int i = b + 2; i < l + 1; i += 2)
        {
            if(!pq.empty())
                {
                    id_f ele = pq.top();
                    while(ele.id < i - b)
                        {
                            pq.pop();
                            if(pq.empty())
                                break;
                            ele = pq.top();
                        }
                    if(!pq.empty() and cowsHere[i] == 0) f[i] = ele.f + 1;
                }
            if(f[i + 2 - a] != INFINITE)
                pq.push(id_f(i + 2 - a, f[i + 2 - a]));
        }
    if(f[l] != INFINITE) cout << f[l] << endl;
    else cout << -1 << endl;

    return 0;
}//时间复杂度:O(nlogn)

运行结果

相关文章

  • 动态规划之灌溉草场

    问题描述 解题分析 程序实现 运行结果

  • 4. 动态规划算法

    1. 动态规划算法总结2. 漫画:什么是动态规划?3.算法之动态规划4. 动态规划-算法

  • 2018-11-14

    今天学了动态规划一些知识,着重看了一下动态规划之背包算法(主要是0-1算法和部分算法),关于动态规划的问题重点是建...

  • 算法之【动态规划】详解(python)

    算法之动态规划详解 定义 动态规划其实是一种运筹学方法,是在多轮决策过程中寻找最优解的方法。 应用场景 动态规划问...

  • Algorithm进阶计划 -- 动态规划(上)

    动态规划动态规划的基本原理动态规划的运用 1. 动态规划的基本原理 动态规划(Dynamic Programmi...

  • [动态规划]Leetcode 1143.最长公共子序列

    如果读者对于动态规划思路解法还不是很了解,可以查阅我之前的一篇博文《算法之【动态规划】详解》,很详细的介绍了动态规...

  • 最优化模型

    数据挖掘之优化模型 1.1数学规划模型 线性规划、整数线性规划、非线性规划、多目标规划、动态规划。 1.2微分方程...

  • 动态规划 Dynamic Programming

    从运筹学和算法的角度综合介绍动态规划 算法分类总结动态规划与静态规划的关系浅析静态规划和动态规划动态规划解非线性规...

  • 动态规划之数组

    动态规划是从初始值算到目标值。递归是从目标值推到初始值。1.Given an integer array with...

  • 算法之动态规划

    假设你是个小偷,背着一个可装4磅东西的背包。你可盗窃的商品有如下3件。可偷商品为了让盗窃的商品价值最高,你该选择哪...

网友评论

    本文标题:动态规划之灌溉草场

    本文链接:https://www.haomeiwen.com/subject/hvkeyxtx.html