c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
2017-12-28 15:17
441 查看
其他钢条切割算法见上一篇博文
扩展动态规划算法,使每个子问题不仅保存最优收益值,还保存对应的切割方案,这样可以输出最优解
伪代码
c++代码实现
运行结果
扩展动态规划算法,使每个子问题不仅保存最优收益值,还保存对应的切割方案,这样可以输出最优解
伪代码
c++代码实现
#include <iostream> using namespace std; int extendedBottomUpCutRod(int p[],int n,int r[],int s[]) { //int r[n+1];记录不同规模子问题的解,这里是1~10 //int s[n+1];记录切割的解,即怎样切的 int q;//记录收益 r[0]=0; for(int j=1;j<=n;++j) { q=-1;//初始为负,常见的表示未知数的方法 for(int i=1;i<=j;++i) { if(q<p[i-1]+r[j-i]) { q=p[i-1]+r[j-i]; s[j]=i; } } r[j]=q; } } void printCutRodSolution(int p[],int n,int r[],int s[]) { extendedBottomUpCutRod(p,n,r,s); cout<<"长度为"<<n<<"的钢条按照此种切割方法的最优收益为:"<<r <<endl; cout<<"对应的最优切割方案的解为:"; while(n>0) { cout<<s <<" ";//输出最优切割方案 n=n-s ; } } int main() { int p[9]={1,5,8,9,10,17,17,20,24}; int r[10],s[10]; printCutRodSolution(p,9,r,s); return 0; }
运行结果
相关文章推荐
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- c++使用动态规划dp(自底向上)重构解决钢条切割输出最大收益和切割方案及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果
- c++实现最大堆维护maxHeapify及运行实例结果
- c++实现最大堆维护maxHeapify及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 【算法导论学习-27】动态规划经典问题01:钢条切割的最大收益
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-暴力求解-c++代码实现及运行实例结果
- 最大子数组问题-c++代码实现及运行实例结果