由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个题,请大家指教
相关主题
问个问题:知道 偏微分方程 和 matlab 的请帮忙问个题
问个题,用递归方法问个题?
问个题问个题,分布式设计
问个题问个题
问个题问个题: 找read-only array中duplicate的数
问个题问个题
问个题问个题1:implement + - * / without arithmetic operation
再问个题问个题
相关话题的讨论汇总
话题: min话题: 木头话题: dp话题: hmax话题: 高度
进入JobHunting版参与讨论
1 (共1页)
r******y
发帖数: 780
1
题目的意思是这样,就是有N根木头, 知道每跟木头的高度,然后一个人站在第一根木
头要跳到之后一根木头(一根根跳,中间不能略过),一次最多只能往上跳X高度或者往
下跳X高度。问怎么修改木头的高度(可以垫高可以砍掉一些变低)问能够让一个人从
起点跳到终点所作的最小改动是多少。
ex: 三根木头,高度 24 30 28, X=2, 答案是4
觉得应该是用DP,但是中间的状态方程就是没有想明白,请指教,或者是不是我的思路
就是错的,不是用DP?
g***s
发帖数: 3811
2
DP is correct assumed all heights and X are integer.

【在 r******y 的大作中提到】
: 题目的意思是这样,就是有N根木头, 知道每跟木头的高度,然后一个人站在第一根木
: 头要跳到之后一根木头(一根根跳,中间不能略过),一次最多只能往上跳X高度或者往
: 下跳X高度。问怎么修改木头的高度(可以垫高可以砍掉一些变低)问能够让一个人从
: 起点跳到终点所作的最小改动是多少。
: ex: 三根木头,高度 24 30 28, X=2, 答案是4
: 觉得应该是用DP,但是中间的状态方程就是没有想明白,请指教,或者是不是我的思路
: 就是错的,不是用DP?

r******y
发帖数: 780
3
恩,都是integer
能具体说说那个状态转移方程吗?
还是有点晕,关键可能也没想明白到底那个状态应该怎么定义
谢谢了

【在 g***s 的大作中提到】
: DP is correct assumed all heights and X are integer.
M*******a
发帖数: 1633
4
不用DP把,二分法吧
e********2
发帖数: 495
5
linear programming肯定可以做。

【在 r******y 的大作中提到】
: 题目的意思是这样,就是有N根木头, 知道每跟木头的高度,然后一个人站在第一根木
: 头要跳到之后一根木头(一根根跳,中间不能略过),一次最多只能往上跳X高度或者往
: 下跳X高度。问怎么修改木头的高度(可以垫高可以砍掉一些变低)问能够让一个人从
: 起点跳到终点所作的最小改动是多少。
: ex: 三根木头,高度 24 30 28, X=2, 答案是4
: 觉得应该是用DP,但是中间的状态方程就是没有想明白,请指教,或者是不是我的思路
: 就是错的,不是用DP?

e********2
发帖数: 495
6
min (|x1| + |x2| + ... + |xn|)
subject to:
x1+y1 < x2 + y2 + X
x2+y2 < x1 + y1 + X
准确的来说是个L1优化问题。有sparse解。

【在 e********2 的大作中提到】
: linear programming肯定可以做。
l**********1
发帖数: 415
7
觉得从后往前用贪婪算法就是解了,还没想到反例。就大牛解答
e********2
发帖数: 495
8
或者pseudopolynomial time:
两条ymax和ymin把这些点全包围,然后对夹在两条线之间的点做DP。

【在 r******y 的大作中提到】
: 恩,都是integer
: 能具体说说那个状态转移方程吗?
: 还是有点晕,关键可能也没想明白到底那个状态应该怎么定义
: 谢谢了

z******g
发帖数: 271
9
有点像leetcode candy
g***s
发帖数: 3811
10
比较直观的做法:
M=max(a[i])
f(n)= min { g(n, i) + |a[n] - i| } i=0..M
g(n,m)=min { g(n-1, [m-X,m+X])}
O(N*M*X) or O(N*M*log(X))
g(n,m) n个桩,最后一个的高度被调整成m,所以只能从g(n-1,[m-X,m+X])过来。

【在 r******y 的大作中提到】
: 恩,都是integer
: 能具体说说那个状态转移方程吗?
: 还是有点晕,关键可能也没想明白到底那个状态应该怎么定义
: 谢谢了

M*******a
发帖数: 1633
11
有道理,所以我想到个O(n)办法
就是一开始以第一根木头为准,后面的木头都根据前一根木头来greedy调整,记录所有
上升和下降的调整数量,比如
x=2
(2,6,2,6,9,9,6,7,4)
->
(2,4,2,4,6,8,6,7,5)
这样调整的值是
(0,-2,0,-2,-3,-1,0,0,1)
这样负数太多,所以(负数+正数)/木头数,再取反 = 1,第一棵树设置为2+1=3,再重
新调整为
(3,5,3,5,7,9,7,7,5)
这样调整的值是
(1,-1,1,-1,-2,1,0,1)
但是仍然好像不是最优解

【在 z******g 的大作中提到】
: 有点像leetcode candy
g***s
发帖数: 3811
12
try {0,100,100,100,100,100,100}
X=2

【在 M*******a 的大作中提到】
: 有道理,所以我想到个O(n)办法
: 就是一开始以第一根木头为准,后面的木头都根据前一根木头来greedy调整,记录所有
: 上升和下降的调整数量,比如
: x=2
: (2,6,2,6,9,9,6,7,4)
: ->
: (2,4,2,4,6,8,6,7,5)
: 这样调整的值是
: (0,-2,0,-2,-3,-1,0,0,1)
: 这样负数太多,所以(负数+正数)/木头数,再取反 = 1,第一棵树设置为2+1=3,再重

M*******a
发帖数: 1633
13
这个好像是不行
我作法是不是最优解法
不知道怎么最优法

【在 g***s 的大作中提到】
: try {0,100,100,100,100,100,100}
: X=2

l******6
发帖数: 340
14
F(n , h) = abs(h(n) - h) if n == nmax
F(n , h) = abs(h - h(n)) + min (F(n + 1 , h + x)) where x = -X to X , limit
to h + x is within hmin and hmax
hmin = min(all h) hmax = max (all h)
ret = min F(0 , h)
1 (共1页)
进入JobHunting版参与讨论
相关主题
问个题问个题
问个题:get max value from Queue, with O(1)?问个题
问个题问个题
问个题:use caching for parallel BFS再问个题
问个问题:知道 偏微分方程 和 matlab 的请帮忙问个题
问个题,用递归方法问个题?
问个题问个题,分布式设计
问个题问个题
相关话题的讨论汇总
话题: min话题: 木头话题: dp话题: hmax话题: 高度