• 51nod1402(贪心)


    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1402

    题意:中文题诶~

    思路:贪心

    对于一个桩点,如果我们只考虑其前面的桩点对它的影响的话,可能会出现当前桩点确定后后面的桩点无论取什么值都不满足题意。。。

    比如:0××3×0,如果之考虑前面的点的影响的话,当3这个桩点取3后,0位置无论如何都是满足不了的。。。

    其实这个问题只要再从后面往前扫一遍就好了。。

    综上所述,此题解题步骤为:

    1. 从前往后扫一遍,扫描过程为:对于当前点,若没有桩点限制,其值为前一个位置+1,若有桩点限制,则取两者中值较小者。。。

    2. 从后往前扫一边。。

    3. 每个点的值都为两次扫面结果较小者。。

    4. 答案为所有点值中最大值。。

    代码:

     1 #include <iostream>
     2 #include <string.h>
     3 using namespace std;
     4 
     5 const int MAXN=1e5+10;
     6 const int inf=1e7;
     7 int l[MAXN], r[MAXN], a[MAXN];
     8 
     9 int main(void){
    10     int t;
    11     cin >> t;
    12     while(t--){
    13         memset(l, 0, sizeof(l));
    14         memset(r, 0, sizeof(r));
    15         memset(a, -1, sizeof(a));
    16         int n, m, x, y;
    17         cin >> n >> m;
    18         while(m--){
    19             cin >> x >> y;
    20             a[x]=y;
    21         }
    22         a[1]=0;
    23         int cnt1=0, cnt2=inf;
    24         for(int i=1; i<=n; i++){
    25             cnt1++;
    26             if(a[i]>-1) cnt1=min(cnt1, a[i]);
    27             l[i]=cnt1;
    28         }
    29         for(int i=n; i>=1; i--){
    30             cnt2++;
    31             if(a[i]>-1) cnt2=min(cnt2, a[i]);
    32             r[i]=cnt2;
    33         }
    34         int ans=0;
    35         for(int i=1; i<=n; i++){
    36             ans=max(ans, min(l[i], r[i]));
    37         }
    38         cout << ans << endl;
    39     }
    40     return 0;
    41 }
    View Code
  • 相关阅读:
    JSP 使用
    Spring MVC 读取静态资源时404错误
    Java及Android开发环境搭建
    堆和栈的区别
    fork Bomb
    Hbase Shell常用命令
    CSS选择器的系统介绍
    JavaScript中的位置坐标
    JavaScript事件
    战略型、战术型
  • 原文地址:https://www.cnblogs.com/geloutingyu/p/6714222.html
Copyright © 2020-2023  润新知