题目名称 | 608. 删数 |
---|---|
输入输出 | remove.in/out |
难度等级 | ★☆ |
时间限制 | 1000 ms (1 s) |
内存限制 | 128 MiB |
测试数据 | 10 |
题目来源 | cqw 于2011-11-07加入 |
开放分组 | 全部用户 |
提交状态 | |
分类标签 | |
分享题解 |
通过:61, 提交:75, 通过率:81.33% | ||||
521 | 100 | 0.000 s | 0.00 MiB | C++ |
dateri | 100 | 0.000 s | 0.00 MiB | C++ |
Oo湼鞶oO | 100 | 0.003 s | 0.12 MiB | Pascal |
reamb | 100 | 0.003 s | 0.23 MiB | Pascal |
/k | 100 | 0.003 s | 0.32 MiB | C++ |
Dissolute丶Tokgo | 100 | 0.003 s | 0.33 MiB | C++ |
TBK | 100 | 0.004 s | 0.27 MiB | C++ |
forever | 100 | 0.004 s | 0.33 MiB | C++ |
乌龙猹 | 100 | 0.004 s | 0.33 MiB | C++ |
0 | 100 | 0.004 s | 0.34 MiB | C++ |
本题关联比赛 | |||
20111107 |
关于 删数 的近10条评论(全部评论) | ||||
---|---|---|---|---|
开始竟然手贱多打了一个零,秒爆内存。
| ||||
这道题C++语言的程序我最快,HAPPY!!
| ||||
回复 @/k :
?????
forever
2015-10-17 17:32
6楼
| ||||
| ||||
動規
| ||||
区间型动归,类似于石子归并,不同于石子归并。
My方程状态: f[i][j]表示从i开始的j个数的最大获利。 初始状态:f[i][1] 目标状态:f[1][n] 转移分三种情况: 1、全部直接拿出 2、除头一个或者末一个外的判定为已拿出,头一个或者末一个单独拿出。 3、除第二种情况,将从i开始的j个数分成两部分(好多种情况),两部分一部分判定为已拿出,另一部分为要拿出的。 听说某个什么什么取数和本题很像,找时间去做做。 | ||||
動態規劃。F[i,j]表示前i個、后j個數的最大值。 詳細: http://yeefanzhu.blogspot.com/
Makazeu
2011-11-07 19:16
1楼
|
【问题描述】
有 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 。