CF957D Riverside Curio

Posted huangchenyan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF957D Riverside Curio相关的知识,希望对你有一定的参考价值。

dp+预处理

dp[i]表示第i天时的水位线有多少条,

然后你会发现这个dp是有后效性的,当第i天的m[i]>dp[i-1]时就要修改之前的dp值

因此我们预处理出每一天的至少要多少条水位线,记l[i]为多少条水位线

所以每天至少需要m[i]+1条水位线,然后我们从后往前枚举,记录now表示从后推出当前的i需要的水位线

l[i]=max(now,m[i]+1)

#include <bits/stdc++.h>
#define ll long long 
using namespace std;
ll n,m[100011],dp[100011];
ll l[100011];
int main()

    scanf("%lld",&n);
    for (int i=1;i<=n;i++)
      scanf("%lld",&m[i]);
    ll now;
    now=m[n]+1;
    for (int i=n;i>=1;i--)
    
        now--;
        now=max(now,m[i]+1);
        l[i]=now;//同上
    
    dp[1]=1;//第一天肯定有一条水位线
    for (int i=2;i<=n;i++)
    
        dp[i]=dp[i-1];
        dp[i]=max(dp[i],m[i]+1);
        dp[i]=max(dp[i],l[i]);
    
    ll ans=0;
    for (int i=1;i<=n;i++)
      ans+=dp[i]-1-m[i];//统计水位之下的水位线
    printf("%lld\n",ans);

 

以上是关于CF957D Riverside Curio的主要内容,如果未能解决你的问题,请参考以下文章

关于安排

CF 爆发者

[CF930E]/[CF944G]Coins Exhibition

CF怎么改名

dp专题

Codeforces | CF1028C Rectangles