由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 请教四边形不等式
相关主题
旧题重提: 扔玻璃杯/扔鸡蛋问题F家面经
Senior Electrical Design Engineer请教一道数学题
求houston的ME工作机会G一个新题
求助:2倍年龄问题的通项解析式问题一道面试题求解 -- leetcode原题变种
一道有趣的算法题算法题目一问
收到yahoo口头offer, 求选择问题!!!有没有opt申请了2月还init. review的?
问道概率题OPT approved(VSC)
很讨厌做greedy的题请教OPT 问题
相关话题的讨论汇总
话题: int话题: cut话题: cost话题: dp话题: numofcut
进入JobHunting版参与讨论
1 (共1页)
l*********y
发帖数: 142
1
我在做 uva 10003, 题目如下,
You have to cut a wood stick into pieces. The most
affordable company, The Analog Cutting Machinery, Inc. (ACM),
charges money according to the length of the stick being
cut.
Their procedure of work requires that they only make one
cut at a time.
It is easy to notice that different selections in the
order of cutting can led to different prices. For example,
consider a stick of length 10 meters that has to be
cut at 2, 4 and 7 meters from one end. There are
several choices. One can be cutting first at 2, then at
4, then at 7. This leads to a price of 10 + 8 +
6 = 24 b
ecause the first stick was of 10 meters, the resulting
of 8 and the last one of 6. Another choice could be
cutting at 4, then at 2, then at 7. This would lead
to a price of 10 + 4 + 6 = 20, which is a better
price.
Your boss trusts your computer abilities to find out the
minimum cost for cutting a given stick.
记忆化搜索是n^3, 听说四边形不等式可以加速到n^2, 请问谁能给指出下面的DP应该如何
改?
多谢了!
#include
using namespace std;
int cut[51];
int cost[51][51];
void Init()
{
for (int i = 0; i < 51; i++) {
fill_n(cost[i], 51, numeric_limits::max() / 10);
}
}
int DP(int i, int j)
{
if (i == j - 1) {
return 0;
} else if (cost[i][j] != numeric_limits::max() / 10) {
return cost[i][j];
} else {
for (int k = i + 1; k < j; k++) {
int tmp = DP(i, k) + DP(k, j) + cut[j] - cut[i];
if (tmp < cost[i][j]) {
cost[i][j] = tmp;
}
}
return cost[i][j];
}
}
int main() {
int length;
while (cin >> length) {
if (length == 0) break;
int numofcut;
cin >> numofcut;
Init();
fill_n(cut, 51, 0);
cut[0] = 0;
for (int i = 1; i <= numofcut; i++) {
cin >> cut[i];
}
cut[numofcut + 1] = length;
int cost = DP(0, numofcut + 1);
cout << "The minimum cutting is " << cost << "." << endl;
}
return 0;
}
1 (共1页)
进入JobHunting版参与讨论
相关主题
请教OPT 问题一道有趣的算法题
OPT CA center case收到yahoo口头offer, 求选择问题!!!
求教:这两道题有什么陷阱吗?问道概率题
我的opt好慢很讨厌做greedy的题
旧题重提: 扔玻璃杯/扔鸡蛋问题F家面经
Senior Electrical Design Engineer请教一道数学题
求houston的ME工作机会G一个新题
求助:2倍年龄问题的通项解析式问题一道面试题求解 -- leetcode原题变种
相关话题的讨论汇总
话题: int话题: cut话题: cost话题: dp话题: numofcut