poj解题报告——2313

来源:互联网 发布:男生认妹妹心理知乎 编辑:程序博客网 时间:2024/05/17 02:54

         开始假设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<cstdio>#include<cmath>#include<iostream>using namespace std;int a[105],b[105],n;int getMid(int a,int b,int c){int min=a,max=a;min=(min<b?min:b);min=(min<c?min:c);max=(max>b?max:b);max=(max>c?max:c);return a+b+c-min-max;}int main(){int i;scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];}for(i=1;i<n-1;i++)b[i]=getMid(b[i-1],a[i],b[i+1]);    int ans=0;for(i=0;i<n;i++)ans+=abs(a[i]-b[i]);for(i=0;i<n-1;i++)ans+=abs(b[i]-b[i+1]);printf("%d\n",ans);return 0;}


0 1
原创粉丝点击