由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 有个g家机器人走格子的变体
相关主题
请教一道G题的代码量请您问“|”这个符号用英文怎么说?
【图论】某startup,Cactus graph求多少loopsshare一个a公司的2nd phone
报个Google电面面经一个算法题
问个精华区的面试题这题咋做?
问一道NP算法题一道题:Vertical Sticks
检查graph里面是否有circle,是用BFS,还是DFS?这道题就是用Dijkstra 吗?
How many full binary trees?请问一道题
发Amazon三次 Phone Interview 面经,赞RP求祝福一道面试题
相关话题的讨论汇总
话题: int话题: x1话题: x2话题: vector话题: dp1
进入JobHunting版参与讨论
1 (共1页)
d******v
发帖数: 801
1
一个m*n的matrix每个格子上放一定数量的钱,机器人走过一个格子就把钱拿走,从左
上角走到右下角,只能向下向右走。求出两个机器人能拿到的钱的总和最大值。
u*a
发帖数: 247
2
两个机器人?

【在 d******v 的大作中提到】
: 一个m*n的matrix每个格子上放一定数量的钱,机器人走过一个格子就把钱拿走,从左
: 上角走到右下角,只能向下向右走。求出两个机器人能拿到的钱的总和最大值。

d******v
发帖数: 801
3
是啊,一个机器人就是leetcode原题了。

【在 u*a 的大作中提到】
: 两个机器人?
u*a
发帖数: 247
4
两个从同一个角出发么?走一遍把走过地方设为0,再走一遍不就完了。

【在 d******v 的大作中提到】
: 是啊,一个机器人就是leetcode原题了。
w****k
发帖数: 755
5
先求得最大值和路径,然后把路径上的单元都设为0,然后再来一遍,相加即可。有反
例么?
h****t
发帖数: 69
6
Counter example
0, 0, 2
0, 3, 2
0, 1, 0
greedy = (3 + 2) + 2 = 7
optimal = (3 + 1) + (2 + 2) = 8
l*******a
发帖数: 16
7
分成上下三角分开走?
r****7
发帖数: 2282
8
看成一个图,把两个机器人看成机器人从左上走到右下,再从右下走到左上这么一个路
径,找到最长的路径。

【在 d******v 的大作中提到】
: 一个m*n的matrix每个格子上放一定数量的钱,机器人走过一个格子就把钱拿走,从左
: 上角走到右下角,只能向下向右走。求出两个机器人能拿到的钱的总和最大值。

u*a
发帖数: 247
9
不能直接找吧。这不是一个静态的图,走过的格子被清零了。

【在 r****7 的大作中提到】
: 看成一个图,把两个机器人看成机器人从左上走到右下,再从右下走到左上这么一个路
: 径,找到最长的路径。

l********1
发帖数: 74
10
3维DP
相关主题
检查graph里面是否有circle,是用BFS,还是DFS?请您问“|”这个符号用英文怎么说?
How many full binary trees?share一个a公司的2nd phone
发Amazon三次 Phone Interview 面经,赞RP求祝福一个算法题
进入JobHunting版参与讨论
r****7
发帖数: 2282
11
清不清零没影响,反正你也不能走同一个格子两次

【在 u*a 的大作中提到】
: 不能直接找吧。这不是一个静态的图,走过的格子被清零了。
u*a
发帖数: 247
12
Why not?

【在 r****7 的大作中提到】
: 清不清零没影响,反正你也不能走同一个格子两次
i*********e
发帖数: 21
13
钱的数量改成负数,然后求流量为2的最小费用流。再取负就是答案。
i*********e
发帖数: 21
14
话说回来,这是某人/某书上的变体还是真的有人面试时被问了?面试问费用流也算是
变态了。
h****t
发帖数: 69
15
The cost of minimum-cost flow problem is on the edges, not on the vertices.
d******v
发帖数: 801
16
这是原来有人发过的g家面经

【在 i*********e 的大作中提到】
: 话说回来,这是某人/某书上的变体还是真的有人面试时被问了?面试问费用流也算是
: 变态了。

i*********e
发帖数: 21
17

不好意思,我略过了一些步骤。
把每个vertice分拆成两个vertice, create two edges between them, one with INF
capacity and 0 cost, one with capacity of 1 and cost of -money. Edges
between the original vertices stays the same, with 0 cost and INF capacity(
or capacity of 2, does not matter).
This is the standard way to move cost/capacity to edges.

【在 h****t 的大作中提到】
: The cost of minimum-cost flow problem is on the edges, not on the vertices.
h****t
发帖数: 69
18
多谢,受教了。这个面试题未免太难了点。
U***A
发帖数: 849
19
有没有人给个算法。
f*********s
发帖数: 34
20
If there is one robot, it can be at each of m*n locations, with DP,
calculation needs to be done once only for each location so the time
complexity is O(m*n).
If there are two robots, they can be at each of (m*n)*(m*n) locations, again
with DP, calculation needs to be done once only for each location so the
time complexity is O(m*n*m*n).
相关主题
这题咋做?请问一道题
一道题:Vertical Sticks一道面试题
这道题就是用Dijkstra 吗?Leetcode online judge的word search是不是用dp?
进入JobHunting版参与讨论
U***A
发帖数: 849
21
给个具体算法?

again

【在 f*********s 的大作中提到】
: If there is one robot, it can be at each of m*n locations, with DP,
: calculation needs to be done once only for each location so the time
: complexity is O(m*n).
: If there are two robots, they can be at each of (m*n)*(m*n) locations, again
: with DP, calculation needs to be done once only for each location so the
: time complexity is O(m*n*m*n).

j********g
发帖数: 80
22
int twoRobs(vector > &MP){
int M = MP.size();
int N = MP[0].size();
int P_LEN = M + N -1;
vector > dp1 = vector >(N, vector(N, 0));
vector > dp2 = vector >(N, vector(N, 0));
dp1[0][0] = MP[0][0];
dp2[0][0] = MP[0][0];
for (int p = 2; p <= P_LEN; p++){//p is the length of the path
for (int x1 = 0; x1 < N; x1++){
for (int x2 = x1; x2 < N; x2++){
int y1 = p - 1 - x1;
int y2 = p - 1 - x2;
if(y1<0 || y2<0 || y1>=M || y2>=M)
continue;
int best = 0;
int delta = MP[y1][x1];
if (x1 != x2)
delta += MP[y2][x2];
if(x1>0 && x2>0)//from left left
best = max(best, dp1[x1-1][x2-1] + delta);
if(x1>0 && y2>0)//from left up
best = max(best, dp1[x1-1][x2] + delta);
if(y1>0 && x2>0)//from up left
best = max(best, dp1[x1][x2-1] + delta);
if(y1>0 && y2>0)//from up up
best = max(best, dp1[x1][x2] + delta);
dp2[x1][x2] = best;
}
}
dp1=dp2;
}
return dp1[N-1][N-1];
}
W*********y
发帖数: 481
23
传纸条模型
三维dp

【在 d******v 的大作中提到】
: 一个m*n的matrix每个格子上放一定数量的钱,机器人走过一个格子就把钱拿走,从左
: 上角走到右下角,只能向下向右走。求出两个机器人能拿到的钱的总和最大值。

d*******8
发帖数: 23
24
这就是一个二维动态规划的问题.
下面是我的代码链接和用 hlight 给的例子作为测试来验证的代码:
http://ideone.com/fnC3de
a******u
发帖数: 69
i****7
发帖数: 26
1 (共1页)
进入JobHunting版参与讨论
相关主题
一道面试题问一道NP算法题
Leetcode online judge的word search是不是用dp?检查graph里面是否有circle,是用BFS,还是DFS?
怎么证明:find the farthest pair of vertices of an n-vertex convex polygon in O(n) timeHow many full binary trees?
上道图论的吧发Amazon三次 Phone Interview 面经,赞RP求祝福
请教一道G题的代码量请您问“|”这个符号用英文怎么说?
【图论】某startup,Cactus graph求多少loopsshare一个a公司的2nd phone
报个Google电面面经一个算法题
问个精华区的面试题这题咋做?
相关话题的讨论汇总
话题: int话题: x1话题: x2话题: vector话题: dp1