问题:给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,...,n),求切割钢条方案,使得销售收益rn最大。如果长度为n英寸的钢条的价格pn足够大,最优解可能就是完全不需要切割。
方法一:递归
从上而下把所有的全部搜索一遍
int CUT_ROD(int p[],int n)
{
if(n==0)
return 0;
int q=INT_MIN;
for(int i=1;i<=n;i++)
{
q=max(q,p[i]+CUT_ROD(p,n-i));
printf("n=%d",n-i);
}
printf(" q=%d",q);
printf("\n");
return q;
}
方法二:自顶而下的保存已计算子问题的递归复杂度o(n^2)
int a(int p[],int n,int r[])
{
int q;
if(r[n]>0)
return r[n];
if(n==0)
q=0;
else
{

这篇博客探讨了如何解决钢条切割问题以获得最大收益,分别介绍了递归、自顶而下的记忆化搜索和动态规划方法。动态规划方法通过自底而上的for循环求解,同时提供了重构解来输出最优切割方案。最后,博客展示了不同长度钢条的价格以及使用动态规划求解的代码示例。
最低0.47元/天 解锁文章
818

被折叠的 条评论
为什么被折叠?



