zoukankan      html  css  js  c++  java
  • [Grakn Forces 2020]-D. Searchlights (暴力+DP)

    [Grakn Forces 2020]-D. Searchlights (暴力+DP)

    题面:

    思路:

    设数组(c_i) 代表将所有机器人右移(mathit i) 步后,将所有机器人移除探照灯的监视范围至少多少步上移。

    那么如何获得数组(mathit c)呢?

    我们(O(n*m))枚举每一对机器人(mathit i)和探测灯(mathit j),如果(a_i.xleq b_j.x)

    我们更新(c[b_j.x-a_i.x]=max(c[b_j.x-a_i.x],b[j].y-a[i].y+1))

    最后再对数组(mathit c)做一个后缀最大值,然后答案就是

    [max_{i=0}^{i=1e6+1}{c_i+i} ]

    代码:

    int n, m;
    pii a[2020];
    pii b[2020];
    int c[maxn];
    int main()
    {
    #if DEBUG_Switch
        freopen("C:\code\input.txt", "r", stdin);
    #endif
        //freopen("C:\code\output.txt","w",stdout);
        n = readint();
        m = readint();
        repd(i, 1, n)
        {
            a[i].fi = readint();
            a[i].se = readint();
        }
        repd(i, 1, m)
        {
            b[i].fi = readint();
            b[i].se = readint();
        }
        repd(i, 1, n)
        {
            repd(j, 1, m)
            {
                if (b[j].fi >= a[i].fi)
                {
                    // cout << b[j].fi - a[i].fi << " " << b[j].se - a[i].se + 1 << endl;
                    c[b[j].fi - a[i].fi] = max(c[b[j].fi - a[i].fi], b[j].se - a[i].se + 1);
                }
            }
        }
        int ans = inf;
        for (int i = 1000001; i >= 0; --i)
        {
            c[i] = max(c[i], c[i + 1]);
            ans = min(ans, c[i] + i);
        }
        printf("%d
    ", ans);
        return 0;
    }
     
    
    本博客为本人原创,如需转载,请必须声明博客的源地址。 本人博客地址为:www.cnblogs.com/qieqiemin/ 希望所写的文章对您有帮助。
  • 相关阅读:
    OpenCV数字图像处理学习笔记整理
    SSM框架整合
    Spring MVC 拦截器
    SpringMVC的JSON数据交互和RESTful支持
    Spring MVC数据绑定
    Spring MVC 入门
    Spring 与 Mybatis整合
    MyBatis的关联映射
    iview table中的render函数使用
    iview+vue查询分页实现
  • 原文地址:https://www.cnblogs.com/qieqiemin/p/13764277.html
Copyright © 2011-2022 走看看