CF957D Riverside Curio
2024-09-06 17:14:54
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);
}
最新文章
- C#文件安全管理解析
- iOS开发——UI进阶篇(三)自定义不等高cell,如何拿到cell的行高,自动计算cell高度,(有配图,无配图)微博案例
- poj2236(并查集)
- jQuery Raion, Select, CheckBox selector function
- 重新想象 Windows 8 Store Apps (37) - 契约: Settings Contract
- C++中new的解说
- 小心!#define max(a,b) a>;b?a:b
- Dungeon Master(poj 2251)
- StringBuffer工具类整理(一)
- 关于 viewport meta
- 将String类型的数字字符转换成int
- Unity使用GL画线
- 【转载】stm32定时器-----珍藏版
- hdu 5937 -- Equation(搜索)
- tomcat生产部署关键参数设置
- 使用mpvue开发小程序教程(二)
- ie8的input的placeholder不显示的解决bug
- 在VS2010中使用Git【图文】转
- InfluxDB1.2.4部署(centos6.8)
- gtk_init()