Solution - P2101 命运石之门的选择
一道好题,最开始想出来了正解然后被自己否了,想了半个小时没想出来看了题解才发现。
思路
很明显这道题的答案最大是 \(n\)(全部竖着涂)。
这道题的填涂方法有两种:横涂和竖涂。显然我们可以横涂直到触碰到最小高度,然后图就被分割成了若干份。然后分治处理,取横涂和竖涂最优即可。
于是,没了。
代码
#include <bits/stdc++.h>
#define rint register int
#define rllong register long long
#define llong long long
#define N 5005
using namespace std;
int a[N];
int n;
inline int solve(rint l, rint r, rint k){
rint minn = 1e9+7, res = 0;
for(rint i = l; i <= r; ++i)
if(a[i] <= minn) minn = a[i];
rint i = l, j = l;
while(i <= r){
while(j <= n && a[j] > minn) ++j;
res += solve(i, j-1, minn);
i = j;
while(i <= n && a[i] == minn) ++i;
j = i;
}
return min(res+minn-k, r-l+1);
}
int main(){
scanf("%d", &n);
for(rint i = 1; i <= n; ++i) scanf("%d", &a[i]);
printf("%d", solve(1, n, 0));
return 0;
}

浙公网安备 33010602011771号