2017-05-24
题目
输入n,然后输入n个数表示山头的高度。你要铲平或者填土使得任意两山高度不能相差超过17,变动k单位高度需要k^2的钱,计算最少需要多少钱。
题解
暴力搜索
代码
/*
ID: xcwhkh1
LANG: C
TASK: skidesign
*/
#include <stdio.h>
#include <string.h>
int main () {
FILE *fin=fopen("skidesign.in","r");
FILE *fout=fopen("skidesign.out","w");
int n,sum,i,j,max=0,min=1000,mmin=1000000;
int a[1000];
fscanf(fin,"%d",&n);
for(int i=0;i<n;i++)
{
fscanf(fin,"%d",&a[i]);
if(a[i]>max)
max=a[i];
if(a[i]<min)
min=a[i];
}
printf("%d %d\n",min,max);
for(int i=min;i<max;i++)//i为下限
{
sum=0;
for(int j=0;j<n;j++)
{
if(a[j]-i>17)
sum+=((a[j]-i-17)*(a[j]-i-17));
if(i>a[j])
sum=sum+(i-a[j])*(i-a[j]);
}
if(sum<mmin)
mmin=sum;
}
fprintf(fout,"%d\n",mmin);
return 0;
}