记录编号 169767 评测结果 AAAAAAAAAA
题目名称 [USACO Jan09] 气象牛 最终得分 100
用户昵称 Gravatarlenibomb 是否通过 通过
代码语言 C++ 运行时间 0.007 s
提交时间 2015-07-10 15:19:55 内存使用 0.37 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
using namespace std;
int n,e,m[105],f[105][105],sum[105],he[105][105];
int min(int a,int b)
{
	return a<b?a:b;
}
int to(int x)
{
	if(x<0)
	return -x;
	return x;
}
int Sum(int x,int y,int k)
{
	int aa;
	int ans=0;
	if(k==1)
	{
        for(int i=y+1;i<=n;i++)
		ans+=to(m[i]-m[y])*2;
	}
	if(k==2)
	{
		for(int i=x+1;i<=y-1;i++)
		{
			ans+=to(2*m[i]-m[x]-m[y]);
		}
	}
//	printf("%d ",ans);
	return ans;
}
int main()
{
	freopen("baric.in","r",stdin);
	freopen("baric.out","w",stdout);
	scanf("%d%d",&n,&e);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&m[i]);
	}
	for(int i=1;i<=n;i++)
	{
		f[i][1]=0;
		for(int j=1;j<=n;j++)  //预处理!
		{
			if(j==i) continue;
			 f[i][1]=2*to((m[j]-m[i]))+f[i][1];
		}
		sum[i]=Sum(i,i,1);
		for(int j=1;j<=n;j++)
		{
			he[i][j]=Sum(i,j,2);
		}
	}

/*	for(int i=1;i<=n;i++)
	{
		printf("%d   %d    \n",i,f[i][1]);
	}*/
/*	for(int i=2;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		printf("XX ");
		for(int j=i+1;j<=n+1;j++)
		{
			sum[i][j]=m[i]+m[j];
			printf("%2d ",sum[i][j]);
		}
		printf("\n");
	}
*/
	for(int i=2;i<=n;i++)
	{
		for(int j=2;j<=i;j++)
		{
			f[i][j]=0x7ffffff;   //预处理最大道【i】,否则后续会爆,  吃"亏 "了
			for(int k=j-1;k<=i;k++)
			{
				//printf("%d  %d  %d  : %d  ",i,j,k,f[k][j-1]);
				f[i][j]=min(f[i][j],f[k][j-1]+he[k][i]+sum[i]-sum[k]);
				//printf(" %d  \n",f[i][j]);
				//printf("%d   %d  \n",f[k][j-1],Sum(k,i));
			}
		}
	}
	int kk=1000000;
	int zhi;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=i;j++)
		{
		//	printf("%d ",f[i][j]);
			if(f[i][j]<=e)
			{
				if(j<kk)
				{
					kk=j;
					zhi=f[i][j];
				}
				if(j==kk)
				{
					zhi=min(zhi,f[i][j]);
				}
			}
		}
	}
	printf("%d %d",kk,zhi);
//	while(1);

}