题目名称 608. 删数
输入输出 remove.in/out
难度等级 ★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 10
题目来源 Gravatarcqw 于2011-11-07加入
开放分组 全部用户
提交状态
分类标签
动态规划
分享题解
通过:61, 提交:75, 通过率:81.33%
Gravatar521 100 0.000 s 0.00 MiB C++
Gravatardateri 100 0.000 s 0.00 MiB C++
GravatarOo湼鞶oO 100 0.003 s 0.12 MiB Pascal
Gravatarreamb 100 0.003 s 0.23 MiB Pascal
Gravatar/k 100 0.003 s 0.32 MiB C++
GravatarDissolute丶Tokgo 100 0.003 s 0.33 MiB C++
GravatarTBK 100 0.004 s 0.27 MiB C++
Gravatarforever 100 0.004 s 0.33 MiB C++
Gravatar乌龙猹 100 0.004 s 0.33 MiB C++
Gravatar0 100 0.004 s 0.34 MiB C++
本题关联比赛
20111107
关于 删数 的近10条评论(全部评论)
开始竟然手贱多打了一个零,秒爆内存。
GravatarMagic_Sheep
2016-03-06 10:22 8楼
这道题C++语言的程序我最快,HAPPY!!
Gravatar/k
2015-10-17 17:38 7楼
回复 @/k :
?????
Gravatarforever
2015-10-17 17:32 6楼
Gravatar一個人的雨
2015-10-16 14:18 5楼
回复 @真呆菌 :
四重循环在此膜拜三重循环方法…
另外千分纪念
Gravatar水中音
2014-10-26 17:23 4楼
動規
GravatarYeehok
2011-11-08 17:05 3楼
区间型动归,类似于石子归并,不同于石子归并。
My方程状态:
f[i][j]表示从i开始的j个数的最大获利。
初始状态:f[i][1]
目标状态:f[1][n]
转移分三种情况:
1、全部直接拿出
2、除头一个或者末一个外的判定为已拿出,头一个或者末一个单独拿出。
3、除第二种情况,将从i开始的j个数分成两部分(好多种情况),两部分一部分判定为已拿出,另一部分为要拿出的。
听说某个什么什么取数和本题很像,找时间去做做。
GravatarTruth.Cirno
2011-11-07 21:56 2楼
動態規劃。F[i,j]表示前i個、后j個數的最大值。 詳細: http://yeefanzhu.blogspot.com/
GravatarMakazeu
2011-11-07 19:16 1楼

608. 删数

★☆   输入文件:remove.in   输出文件:remove.out   简单对比
时间限制:1 s   内存限制:128 MiB

【问题描述】

有 N 个不同的正整数数 x 1 , x 2 , ... x N 排成一排,我们可以从左边或右边去掉连续的 i 个数(只能从两边删除数), 1<=i<=n ,剩下 N-i 个数,再把剩下的数按以上操作处理,直到所有的数都被删除为止。

每次操作都有一个操作价值,比如现在要删除从 i 位置到 k 位置上的所有的数。操作价值为 |x i – x k |*(k-i+1) ,如果只去掉一个数,操作价值为这个数的值。

任务

如何操作可以得到最大值,求操作的最大价值。

Input Data

输入文件 remove.in 的第一行为一个正整数 N ,第二行有 N 个用空格隔开的 N 个不同的正整数。

Output Data

输出文件 remove.out 包含一个正整数,为操作的最大值

约束和提示

3<=N<=100
N 个操作数为 1..1000 之间的整数。
样例

remove.in

6
54 29 196 21 133 118

remove.out

768

说明:经过 3 次操作可以得到最大值,第一次去掉前面 3 个数 54 、 29 、 196 ,操作价值为 426 。第二次操作是在剩下的三个数( 21 133 118 )中去掉最后一个数 118 ,操作价值为 118 。第三次操作去掉剩下的 2 个数 21 和 133 ,操作价值为 224 。操作总价值为 426+118+224=768 。