Poj 2013 Sequence【贪心|迭代】

题目链接
在这里插入图片描述
开始时取 b [ i ] = a [ i ] ( 1 < = i < = n ) b[i] = a[i](1 <= i <= n) b[i]=a[i](1<=i<=n)
若存在 i i i使 b [ i ] < > M i d ( b [ i − 1 ] , a [ i ] , b [ i + 1 ] ) ( 2 < = i < = n − 1 ) b[i] <> Mid(b[i - 1], a[i], b[i + 1]) (2 <= i <= n - 1) b[i]<>Mid(b[i1],a[i],b[i+1])(2<=i<=n1)
{ M i d ( x , y , z ) Mid(x, y, z) Mid(x,y,z)表示 x , y , z x, y, z x,y,z中数值居中间的数}
b [ i ] = M i d ( b [ i − 1 ] , a [ i ] , b [ i + 1 ] ) b[i]=Mid(b[i - 1], a[i], b[i + 1]) b[i]=Mid(b[i1],a[i],b[i+1])
直到没有以上所说的 i i i
所得的 b b b数列即为所求
按公式求V
输出

#define ll long long
#define vec vector<int>
#define P pair<int,int>
#define inf 0x3f3f3f3f
#define MAX 205

int N, a[MAX], b[MAX], arr[3];
int mid(int x, int y, int z) {
	arr[0] = x, arr[1] = y, arr[2] = z;
	sort(arr, arr + 3);
	return arr[1];
}
int main() {
	while (scanf("%d", &N) != EOF) {
		for (int i = 1; i <= N; i++)
			scanf("%d", &a[i]), b[i] = a[i];
		int sign = 1;
		while (1) {
			sign = 0;
			for (int i = 2; i < N; i++) {
				int tt = mid(b[i - 1], a[i], b[i + 1]);
				if (b[i] == tt)continue;
				else b[i] = tt, sign = 1;
			}
			if (!sign)break;
		}
		int res = abs(double(a[N] - b[N]));
		for (int i = 1; i < N; i++) {
			res += abs(double(a[i] - b[i]));
			res += abs(double(b[i] - b[i + 1]));
		}
		cout << res << endl;
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值