记录编号 454281 评测结果 AAAAAAAAAT
题目名称 [HZOI 2016]架设电话线路 最终得分 90
用户昵称 Gravatar皓芷 是否通过 未通过
代码语言 C++ 运行时间 2.568 s
提交时间 2017-09-28 18:48:46 内存使用 39.22 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstring>
#define mysister
using namespace std;
const int maxn=100001;
const int maxm=101;
void in(int &x)
{
	x=0;int f=1;char c=getchar();
	while(c<'0'||'9'<c){if(c=='-')f=-1;c=getchar();}
	while('0'<=c&&c<='9'){x=(x<<3)+(x<<1)+(c^'0');c=getchar();}
	x*=f;
}
int n,c,cm[maxm],f[maxn][maxm],h[maxn],ans=0x7fffffff,hist=0,mi[maxm];
int main()
{
	freopen("phonewire.in","r",stdin);
	freopen("phonewire.out","w",stdout);
	in(n);in(c);
	for(int i=1;i<=100;i++)cm[i]=cm[i-1]+c;
	for(int i=1;i<=100;i++)mi[i]=i*i;
	for(int i=1;i<=n;i++)
	  {in(h[i]);hist=max(hist,h[i]);}
	memset(f,0x7f,sizeof(f));
	for(int i=0;i<=100;i++)f[0][i]=0;
	for(int i=1;i<=n;i++)
	  for(int j=h[i];j<=hist;j++)
	    for(int k=h[i-1];k<=hist;k++)
	  	  f[i][j]=min(f[i][j],f[i-1][k]+cm[(int)abs(j-k)]+mi[j-h[i]]);
	for(int i=h[n];i<=hist;i++)
	  ans=min(ans,f[n][i]);
	printf("%d",ans);
	return 0;
}