[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] $ 即可。

$ \rm 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值