由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问道题,看不太懂
相关主题
问一道精华帖的老题Java 问题,请教如何找出一个array里的duplicate segments? (转载)
facebook interview question反对multiple filing 的样板
大家来讨论一下这个求长方形面积的问题吧关于找最大半径K子集的DP题的总结(更新非DP算法)
一道g家的几何题问一道c++面试题
请教一个切割木材的问题【Google字符串面试题】
Huawei USA (Santa Clara), 3 new positions讨论一下careercup上的一道题,找周边全是1的最大子方阵
IBM 面试一般会问什么呢?ms的online evaluation
问个C的基本问题Google店面刚结束
相关话题的讨论汇总
话题: position话题: int话题: dp话题: len话题: cost
进入JobHunting版参与讨论
1 (共1页)
P*******b
发帖数: 1001
1
Given a line segment of length n. You need to cut it into m pieces specified
by position[n] array. The price of cutting a segment of length len in two p
arts is always len (irrespective of cut position). Give a dynamic programmin
g solution to minimize the cost of cutting
h**6
发帖数: 4160
2
直观分析,每次都对半砍。用DP解的话,应该是个 O(m^3) 的问题。
You need to cut it into m pieces specified by position[n] array.
这句话可能不太对,我理解为数组 position[m+1] 表示切割位置,其中 position[0]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
设 dp[i][j] 为把切割点 i,j 之间的线段完全切割的代价,那么 dp[0][m] 为所求答案。
初始条件:
dp[i][i+1] = 0
设 k 为第一刀的位置,则 i dp[i][j] = min(k=i+1 to j-1)(dp[i][k]+dp[k][j]+position[j]-position[i])
t****a
发帖数: 1212
3
han6 come first
qu you wu, zhou lang gu :)
here goes DP solution, as han6 said, O(m^3)
#ifdef HAVE_CONFIG_H
#include
#endif
#include
#include
int cost[100][100];
int best_cut(int position[], int start, int stop) {
// printf("%d\t%d\n", start, stop);
if (cost[start][stop]!=-1) {
return(cost[start][stop]);
} else {
int cost0 = position[stop] - position[start];
if (start+1 == stop) {
cost[start][stop] = cost0;
v********w
发帖数: 136
4
奇怪,为什么你的回帖后半段恢复时才能看到,agree 你的dp解,但直观对半砍好像不对

]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
答案。

【在 h**6 的大作中提到】
: 直观分析,每次都对半砍。用DP解的话,应该是个 O(m^3) 的问题。
: You need to cut it into m pieces specified by position[n] array.
: 这句话可能不太对,我理解为数组 position[m+1] 表示切割位置,其中 position[0]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
: 设 dp[i][j] 为把切割点 i,j 之间的线段完全切割的代价,那么 dp[0][m] 为所求答案。
: 初始条件:
: dp[i][i+1] = 0
: 设 k 为第一刀的位置,则 i: dp[i][j] = min(k=i+1 to j-1)(dp[i][k]+dp[k][j]+position[j]-position[i])

y***d
发帖数: 2330
5
cutting points 是预先给定的还是咋地?

specified
p
programmin

【在 P*******b 的大作中提到】
: Given a line segment of length n. You need to cut it into m pieces specified
: by position[n] array. The price of cutting a segment of length len in two p
: arts is always len (irrespective of cut position). Give a dynamic programmin
: g solution to minimize the cost of cutting

K******g
发帖数: 1870
6
我觉得你简化了这道题。
这道题还有一层意思,从n个position中挑出m个position出来,找出所有组合的最小代
价。你直接把position定义为m个了。

]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
答案。

【在 h**6 的大作中提到】
: 直观分析,每次都对半砍。用DP解的话,应该是个 O(m^3) 的问题。
: You need to cut it into m pieces specified by position[n] array.
: 这句话可能不太对,我理解为数组 position[m+1] 表示切割位置,其中 position[0]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
: 设 dp[i][j] 为把切割点 i,j 之间的线段完全切割的代价,那么 dp[0][m] 为所求答案。
: 初始条件:
: dp[i][i+1] = 0
: 设 k 为第一刀的位置,则 i: dp[i][j] = min(k=i+1 to j-1)(dp[i][k]+dp[k][j]+position[j]-position[i])

h**6
发帖数: 4160
7
这题和前两天我发的取珠宝的问题几乎是一个模子出来的,不过我更习惯于纯 DP 的解
法,而不是类似于填空的假递归。
int best_cut(const vector position)
{
int m = position.size()-1;
vector > dp(m+1, vector(m+1));
for(int i=0; i dp[i][i+1] = 0;
for(int len=2; len<=m; len++)
{
for(int begin=0; begin<=m-len; begin++)
{
int end = begin+len;
int cost = INT_MAX;
for(int k=begin+1; k<=end-1; k++)
cost = min(cost, dp[begin][k]+dp[k][end])
h**6
发帖数: 4160
8
楼主的 n 既表示长度,又表示可切割的点,所以不是很明白到底是什么含义。
如果按照这个理解,可以再定义一维,dp[i][j][x]表示i到j的线段切成x段的代价,一
样能做出来。

【在 K******g 的大作中提到】
: 我觉得你简化了这道题。
: 这道题还有一层意思,从n个position中挑出m个position出来,找出所有组合的最小代
: 价。你直接把position定义为m个了。
:
: ]=0,position[m]=n,而 position[1...m-1] 表示 m-1 处切割。
: 答案。

K******g
发帖数: 1870
9
这个就复杂了,应为i到j之间的割法有很多种,存在一个组合问题。这道题目要code出
来,需要点时间啊

【在 h**6 的大作中提到】
: 楼主的 n 既表示长度,又表示可切割的点,所以不是很明白到底是什么含义。
: 如果按照这个理解,可以再定义一维,dp[i][j][x]表示i到j的线段切成x段的代价,一
: 样能做出来。

h**k
发帖数: 3368
10
多加一层循环就够了

【在 K******g 的大作中提到】
: 这个就复杂了,应为i到j之间的割法有很多种,存在一个组合问题。这道题目要code出
: 来,需要点时间啊

1 (共1页)
进入JobHunting版参与讨论
相关主题
Google店面刚结束请教一个切割木材的问题
求教一个算法面试问题,被难住了Huawei USA (Santa Clara), 3 new positions
请教一道 Google 面试题IBM 面试一般会问什么呢?
用topcoder准备cs 面试问个C的基本问题
问一道精华帖的老题Java 问题,请教如何找出一个array里的duplicate segments? (转载)
facebook interview question反对multiple filing 的样板
大家来讨论一下这个求长方形面积的问题吧关于找最大半径K子集的DP题的总结(更新非DP算法)
一道g家的几何题问一道c++面试题
相关话题的讨论汇总
话题: position话题: int话题: dp话题: len话题: cost