您的位置:首页 > 其它

uva10003 Cutting Sticks

2016-05-24 12:01 141 查看
题目链接

题目大意

一根长为len的木棍,上面有n个点需要切割,切割完之后有n+1根木棍。没切一根木棍时的费用等于木棍的长度,求最小的费用和。


思路

记忆化搜索。solve(l, r) = min(solve(l,k) + solve(k,r)) + a[r] - a[l]。l < k < r。
或者是dp,dp[l][r] = min(dp[l][k] + d[k][r] + a[r] - a[l]),l < k < r。


int solve(int l,int r) {//[0,n+1]
if (dp[l][r]) return dp[l][r];
if (l == r - 1) return 0;
dp[l][r] = INF;
for (int i = l + 1;i < r;++i) {
dp[l][r] = min(dp[l][r], solve(l, i) + solve(i, r) + a[r] - a[l]);
}
return dp[l][r];
}
/****************************************/
a[0] = 0, a[n+1] = len;
memset(dp, 0,sizeof dp);
for (int d = 2;d <= n + 1;++d) {
for (int l = 0;l + d <= n + 1;++l) {
int r = l + d;
dp[l][r] = INF;
for (int k = l + 1;k < r;++k)
dp[l][r] = min(dp[l][r], dp[l][k] + dp[k][r] + a[r] - a[l]);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: