| 记录编号 | 
        29984 | 
        评测结果 | 
        WWWAWWAWWA | 
    
    
        | 题目名称 | 
        388.抢修道路 | 
        最终得分 | 
        30 | 
            
    
    
        | 用户昵称 | 
         TBK | 
        是否通过 | 
        未通过 | 
    
    
        | 代码语言 | 
        C++ | 
        运行时间 | 
        0.047 s  | 
    
    
        | 提交时间 | 
        2011-10-27 09:17:59 | 
        内存使用 | 
        0.32 MiB  | 
        
    
    
    
    		显示代码纯文本
		
		#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;      
int a[2001][3]={0},b[2001][3]={0},c,d,l,m,n,s1=0,s2=0,t,x,y,z;
bool bo1[2001]={false},bo2[2001]={false};
int ab(int k)
{
	if (k<0) return 0-k;
		else return k;
}
int main(void)      
{         
    freopen("roady.in","r",stdin);      
    freopen("roady.out","w",stdout);       
    scanf("%d",&n);   
    for (c=0;c<n;c++) 
	{
		scanf("%d",&a[c][0]);
		b[c][0]=a[c][0];
	}
	for (d=0;d<n;d++) a[d][1]=-1;
	for (d=1;d<n;d++)   
		for (l=d-1;l>=0;l--)   
			if ((a[d][0]>=a[l][0])&&(a[l][2]>=a[d][2]))
			{
				a[d][1]=l;
				a[d][2]=a[l][2]+1;
			}
	x=0;
	for (d=0;d<n;d++) 
		if (a[d][2]>x) x=a[d][2];
	for (d=0;d<n;d++) b[d][1]=-1;
	for (d=1;d<n;d++)   
		for (l=d-1;l>=0;l--)   
			if ((b[d][0]<=b[l][0])&&(b[l][2]>=b[d][2])) 
			{
				b[d][1]=l; 
				b[d][2]=b[l][2]+1;
			}
	y=0;
	for (d=0;d<n;d++)
		if (b[d][2]>y) y=b[d][2];
	for (d=0;d<n;d++)
		if (a[d][2]==x) break;
	t=a[d][1];
	bo1[d]=true;
	while (t!=-1)
	{
		bo1[t]=true;
		t=a[t][1];
	}
	for (d=0;d<n;d++)
		if (bo1[d]==false)
		{
			if ((d!=0)&&(d!=n-1)) 
			{
				if (ab(a[d][0]-a[d-1][0])>ab(a[d][0]-a[d+1][0])) s1+=ab(a[d][0]-a[d+1][0]);
					else s1+=ab(a[d][0]-a[d-1][0]);
			}
				else if (d==0) s1+=ab(a[0][0]-a[1][0]);
						else s1+=ab(a[n-2][0]-a[n-1][0]);
		}
	for (d=0;d<n;d++)
		if (b[d][2]==x) break;
	t=b[d][1];
	bo2[d]=true;
	while (t!=-1)
	{
		bo2[t]=true;
		t=b[t][1];
	}	
	for (d=0;d<n;d++)
		if (bo2[d]==false)
		{
			if ((d!=0)&&(d!=n-1)) 
			{
				if (ab(b[d][0]-b[d-1][0])>ab(b[d][0]-b[d+1][0])) s2+=ab(b[d][0]-b[d+1][0]);
					else s2+=ab(b[d][0]-b[d-1][0]);
			}
				else if (d==0) s2+=ab(b[0][0]-b[1][0]);
					else s2+=ab(b[n-2][0]-b[n-1][0]);
		}
	if (s1<s2) printf("%d\n",s1);
		else printf("%d\n",s2);
    fclose(stdin);
	fclose(stdout);
    return 0;      
}