链接
http://codeforces.com/problemset/problem/803/B
题目大意
给你一个序列,对每个数求出离它最近的 0 跟它的距离。
题解
如果
最后
ansi=min(f1[i],f2[i])
代码
//dp
#include <cstdio>
#include <algorithm>
#define maxn 200005
#define inf 0x3f3f3f3f
using namespace std;
int a[maxn], f[maxn], g[maxn], N;
int main()
{
int i;
scanf("%d",&N);
for(i=1;i<=N;i++)scanf("%d",a+i);
f[0]=inf, g[N+1]=inf;
for(i=1;i<=N;i++)
{
if(a[i]==0)f[i]=0;
else f[i]=f[i-1]+1;
}
for(i=N;i;i--)
{
if(a[i]==0)g[i]=0;
else g[i]=g[i+1]+1;
}
for(i=1;i<=N;i++)printf("%d ",min(f[i],g[i]));
return 0;
}
本文介绍了一个序列问题的解决方法,使用动态规划算法找到每个元素到最近0的距离,并通过两个数组记录左右两侧最近的0,最终得出每个位置上的最短距离。
602

被折叠的 条评论
为什么被折叠?



