这道题其实很不错(虽然我对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; }