比赛 20110414pm 评测结果 AAAAAAAAAA
题目名称 气象牛 最终得分 100
用户昵称 .Xmz 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-04-14 15:17:58
显示代码纯文本
#include <iostream>
#include <cstring>
#include <cstdlib>
#include <cstdio>
#include <cmath>

using namespace std;

const int oo=2000000000;

int f[111][111];
int w[111][111];
int a[111],n,lim;

void init()
{
	scanf("%d%d",&n,&lim);
	for (int i=1;i<=n;i++)
		scanf("%d",a+i);
}

void perdo()
{
	for (int i=1;i<=n;i++)
	for (int j=i+1;j<=n;j++)
	{
		for (int k=i+1;k<j;k++)
			w[i][j]+=abs(2*a[k]-a[i]-a[j]);
	}
	for (int i=1;i<=n;i++)
		for (int k=1;k<i;k++)
			w[0][i]+=2*abs(a[k]-a[i]);
		
	for (int i=1;i<=n;i++)
		for (int k=n;k>i;k--)
			w[i][n+1]+=2*abs(a[k]-a[i]);
	w[0][n+1]=oo;
}

void solve()
{
	perdo();
	for (int i=0;i<=n+1;i++)
	for (int j=1;j<=n+1;j++)
		f[i][j]=oo;
	for (int i=1;i<=n+1;i++)
	{
		for (int j=1;j<=n+1;j++)
		{
			for (int k=0;k<j;k++)
			if (f[i-1][k]!=oo)
			f[i][j]=min(f[i][j],f[i-1][k]+w[k][j]);
		}
		if (f[i][n+1]<=lim)
		{
			printf("%d %d\n",i-1,f[i][n+1]);
			return ;
		}
	}
}

int main()
{
	freopen("baric.in","r",stdin);
	freopen("baric.out","w",stdout);
	init();
	solve();
	return 0;
}