📄 3935658_ce.cpp
字号:
#include <iostream>
using namespace std;
int fale[101][101];//费用记录表
int max_height,min1,min2,max_height_number;
int N,C;
int input[101];
int direction;
int fill(int count);
int set(int count,int i,int abjust_height_fale);
int jdz(int a);
void main()
{
cin>>N;
cin>>C;
max_height=0;max_height_number=0;direction=0;
int count=0;
for(count=1;count<=N;count++)
{
cin>>input[count];
if(input[count]>max_height)
{
max_height_number=count;
max_height=input[count];
}
}
fale[max_height_number][max_height]=0;
direction=-1;
for(count=max_height_number-1;count>=1;count--)//负方向搜索
{
min1=fill(count);
}
direction=1;
for(count=max_height_number+1;count<=N;count++)//正方向搜索
{
min2=fill(count);
}
cout<<min1+min2;
}
int fill(int count)
{
int i=0;
int min=30000,temp=0;
int abjust_height_fale=0;
for(i=input[count];i<=max_height;i++)
{
abjust_height_fale=(i-input[count])*(i-input[count]);
temp=set(count,i,abjust_height_fale);
if(temp<min) min=temp;
}
return min;
}
int set(int count,int i,int abjust_height_fale)
{
int j=0;
int min=30000,temp;
for(j=input[count-direction];j<=max_height;j++)
{
temp=abjust_height_fale+jdz(j-i)*C+fale[count-direction][j];
if(temp<min) min=temp;
}
fale[count][i]=min;
return min;
}
int jdz(int a)
{
if(a>=0) return a;
else return (0-a);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -