poj解题报告——2313

         开始假设b[i] = a[i](1 <= i <= n),显然b[i]对于最后最优值产生影响的有三项|a[i]-b[i]|,|b[i]-b[i-1]|,|b[i]-b[i+1]|, 反应在数轴上要使得这三项最小,那么取值应该是这三数居中的那个,.若存在i使 b[i] < 或者 > Mid(b[i - 1], a[i], b[i + 1]) (2 <= i <= n - 1), mid(x, y, z)表示x, y, z中数值居中间的数}这个画下数轴就知道了,则b[i]=mid(b[i - 1], a[i], b[i + 1]),直到没有以上所说的i,所得的b数列即为所求,按公式求sum, 输出。

#include
#include
#include
using namespace std;
int a[105],b[105],n;
int getMid(int a,int b,int c)
{
	int min=a,max=a;
	min=(minb?max:b);
	max=(max>c?max:c);
	return a+b+c-min-max;
}
int main()
{
	int i;
	scanf("%d",&n);
	for(i=0;i


你可能感兴趣的:(poj,贪心算法)