由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 简单的题自己绕糊涂了 求解答
相关主题
Maximum Sum of Increasing Sequence请问一个老的google题
一个cc150里面的题目,不解career cup book v4 9.7 题
问一道面试智力题G家电面经
问一道算法题largest subsequence sum <= maxSome coding problems from Amazon
居然还有人在推刷题网站今天计划做20题
考古到一道题amazon电面面经
一道 纽约 Morgan Stanley IT Equity Trading 面试题LinkedIn真诡异(附面经)
amazon的一道题我的面试题总结
相关话题的讨论汇总
话题: dp话题: sum话题: a2话题: x2话题: a1
进入JobHunting版参与讨论
1 (共1页)
z****8
发帖数: 5023
1
一堆方块 有H高 两个底 A1 A2
问你最高能堆多高MAX(SUM(H))
要求是上面一个方块的A1大于下面方块的A1 上面一个方块的A2大于下面方块的A2
方块不能倒下来放 也就是说A1 A2 H是固定的
求大牛解答 自己已经晕掉 不知道如何入手了
h**d
发帖数: 630
2
先sort by base_area即A1*A2
然后dp
递归公式
f[j] = max{f[i]}+Hj (i
k****r
发帖数: 807
3
为什么sort by base_area呢?可不可以按A1sort然后dp呢?我试着练一下。create一
个class作为dp的内容including last X2 and current sumH
class dp {
int x2;
int sum;
}
public maxHeight(square[] s) {
sortSquareByA1(s); //sort by A1
int len = s.length;
int[][] dp = new int[len][s.len];
int result;
dp[0][0].sum = square[0].H;
dp[0][0].x2 = square[0].x2;
for(int i = 1; i < len; i++) { //add one more
if (square[i].A2 > square[i - 1].A2) {
dp[i][0].sum = dp[i - 1][0].sum + square[i].H;
} else {
dp[i][0].sum = square[i].H;
}
dp[i][0].x2 = square[i].x2;
}
for(int i = 1; i < len; i++) { //add nothing
dp[0][i].sum = dp[0][i-1].sum;
dp[0][i].x2 = dp[0][i-1].x2;
}
result = dp[0][0].sum;
for(int i = 1; i < len; i++) {
for(int j = 1; j < len - i; j++) {
if (square[i + j].A2 > dp[i - 1][j].x2) {
dp[i][j].sum = dp[i - 1][j].sum + square[i + j].H;
} else {
dp[i][j].sum = square[i + j].H;
}
dp[i][j].x2 = square[i + j].A2;
dp[i][j].sum = dp[i][j - 1].sum > dp[i][j].sum ? dp[i][j - 1].
sum : dp[i][j].sum;
dp[i][j].x2 = dp[i][j - 1].sum > dp[i][j].sum ? dp[i][j - 1].x2
}
result = dp[i][len - i - 1].sum > result ? dp[i][len - i - 1].sum :
result;
}
return result;
}
代码没有优化,不好看;
方法有点笨,还请指教。
z****8
发帖数: 5023
4
我也觉得是sort A1*A2 然后怎么弄就稀里糊涂晕菜了

【在 h**d 的大作中提到】
: 先sort by base_area即A1*A2
: 然后dp
: 递归公式
: f[j] = max{f[i]}+Hj (i
h**d
发帖数: 630
5
按A1或A2 sort也行 只要保证sort之后 可能符合要求的大的方块都是在小的方块后面
就行

【在 k****r 的大作中提到】
: 为什么sort by base_area呢?可不可以按A1sort然后dp呢?我试着练一下。create一
: 个class作为dp的内容including last X2 and current sumH
: class dp {
: int x2;
: int sum;
: }
: public maxHeight(square[] s) {
: sortSquareByA1(s); //sort by A1
: int len = s.length;
: int[][] dp = new int[len][s.len];

b******g
发帖数: 3616
6
A1, A2是底面两个边长吧?这是Cracking Code Interview recursion/dp那章的原题吧
。。。

【在 z****8 的大作中提到】
: 一堆方块 有H高 两个底 A1 A2
: 问你最高能堆多高MAX(SUM(H))
: 要求是上面一个方块的A1大于下面方块的A1 上面一个方块的A2大于下面方块的A2
: 方块不能倒下来放 也就是说A1 A2 H是固定的
: 求大牛解答 自己已经晕掉 不知道如何入手了

b******g
发帖数: 3616
7
sort by base area的原因是
当A1*A2 > B1*B2时,必然意味着A1>B1 || A2>B2,也就是说排除了A可以叠在B上面的
可能性。所以如果以base area排序以后。对于box B来说,排在它后面的所有盒子都无
法叠在它上面,而只需要检验排在它前面的那些盒子是否都符合两边同时小于B1 & B2。
这也就是为什么2楼大牛给的递推公式是:
f[j] = max{f[i]}+Hj (i f[j]表示box j为最底下时的最大高度。依次检查排在j前(i ,如果A1i box i为底的最大高度 f[i] + box j本身的高度 Hj。
如果sort by A1或A2道理也是一样的。
假如sort by A1,那么在检查candidate box i的时候,只要判断 A2i
【在 k****r 的大作中提到】
: 为什么sort by base_area呢?可不可以按A1sort然后dp呢?我试着练一下。create一
: 个class作为dp的内容including last X2 and current sumH
: class dp {
: int x2;
: int sum;
: }
: public maxHeight(square[] s) {
: sortSquareByA1(s); //sort by A1
: int len = s.length;
: int[][] dp = new int[len][s.len];

t*****3
发帖数: 112
8
没错,cc150用的是recursion + DP

【在 b******g 的大作中提到】
: A1, A2是底面两个边长吧?这是Cracking Code Interview recursion/dp那章的原题吧
: 。。。

h***s
发帖数: 45
9
CC第几章第几题呀,怎么没有看到CC有一章讲DP的?
l*****v
发帖数: 122
10
赞分析,明白了

B2。
i

【在 b******g 的大作中提到】
: sort by base area的原因是
: 当A1*A2 > B1*B2时,必然意味着A1>B1 || A2>B2,也就是说排除了A可以叠在B上面的
: 可能性。所以如果以base area排序以后。对于box B来说,排在它后面的所有盒子都无
: 法叠在它上面,而只需要检验排在它前面的那些盒子是否都符合两边同时小于B1 & B2。
: 这也就是为什么2楼大牛给的递推公式是:
: f[j] = max{f[i]}+Hj (i: f[j]表示box j为最底下时的最大高度。依次检查排在j前(i: ,如果A1i: box i为底的最大高度 f[i] + box j本身的高度 Hj。
: 如果sort by A1或A2道理也是一样的。

d*l
发帖数: 1810
11
两个底,不一样的话叫方块吗。题目都没有读懂:(

【在 z****8 的大作中提到】
: 一堆方块 有H高 两个底 A1 A2
: 问你最高能堆多高MAX(SUM(H))
: 要求是上面一个方块的A1大于下面方块的A1 上面一个方块的A2大于下面方块的A2
: 方块不能倒下来放 也就是说A1 A2 H是固定的
: 求大牛解答 自己已经晕掉 不知道如何入手了

g**********h
发帖数: 2
12
sort by A1, 然后对A2做longest increasing subsequence?
b******g
发帖数: 3616
13
思路就是这个思路。和longest increasing subsequence稍稍有点不一样,cc150上那道
马戏团人梯是用排序+longest increasing subsequence做的。这题的唯一区别是,每
个盒子有自己的高度,要求的不是最多能堆几个盒子,而是求最大高度。但也是换汤不
换药。只不过在算subsequence length的时候不是清点有几个盒子,而是清点所有可以
堆上去的盒子的总高度就行了。

【在 g**********h 的大作中提到】
: sort by A1, 然后对A2做longest increasing subsequence?
1 (共1页)
进入JobHunting版参与讨论
相关主题
我的面试题总结居然还有人在推刷题网站
编程菜鸟,请教CISCO面试题。考古到一道题
求pinterest, dropbox, square, uber,groupon内推一道 纽约 Morgan Stanley IT Equity Trading 面试题
Linkedin 第一轮店面amazon的一道题
Maximum Sum of Increasing Sequence请问一个老的google题
一个cc150里面的题目,不解career cup book v4 9.7 题
问一道面试智力题G家电面经
问一道算法题largest subsequence sum <= maxSome coding problems from Amazon
相关话题的讨论汇总
话题: dp话题: sum话题: a2话题: x2话题: a1