[NOIP2018D1T1][NOIP2013D1T1][Luogu P5019]铺设道路 题解

这道题其实很不错(虽然我对CCF抄自己的题这种行为很反感)。

我推了1个多小时的公式终于AC了。

可以用DP来解决此题。

设 $ dp[i] $ 为铺设前 $ i $ 块区域所需要的天数。

可以分类讨论一下。

如果 $ d[i] le d[i-1] $, 

那么 $ dp[i]=dp[i-1] $。

因为在铺设第 $ i-1 $ 块区域时就已经铺设好了第 $ i $ 块区域。

反之,如果 $ d[i] > d[i-1] $,

那么 $ dp[i]=dp[i-1]+d[i]-d[i-1] $。

因为在铺设完第 $ i -1 $ 块区域时,第 $ i $ 块区域还需要铺设 $ d[i]-d[i-1] $ 天。

最后输出 $ dp[n] $ 即可。

$ m code $

# include <bits/stdc++.h>

const int maxN = 1e5 + 10;
int d[maxN];
int dp[maxN]; 
int n;
using namespace std;
namespace Aehnuwx {
    void init() {
        scanf("%d", &n);
        for(register int i = 1; i <= n; i ++)
            scanf("%d", &d[i]);
    }
    int work();
    //void work();
    int work() {
        for(int i = 1; i <= n; i ++)
            if(d[i] <= d[i - 1]) dp[i] = dp[i - 1];
            else dp[i] = dp[i - 1] + d[i] - d[i - 1];
        return dp[n];
    }
};
using namespace Aehnuwx;
int main() {
    Aehnuwx::init();
    printf("%d", Aehnuwx::work());
    return 0;
}
转载是允许的,但是除了博主同意的情况下,必须在文章的明显区域说明出处,否则将会追究其法律责任。
原文地址:https://www.cnblogs.com/Xray-luogu/p/10199483.html