C++实现——动态规划法(切割钢条问题)
C++实现——动态规划法(切割钢条问题)
假定公司出售一段长度为i英寸的钢条的利润为Pi,那么现有一根N英寸的钢条该如何切割才能利润最大,最大为多少。
#include<iostream>
#include<climits>
using namespace std;void mycut_roin(const int p[], int length, int n, int optim_income[], int optim_solution[]);
void show_array(int arr[], int n);int main()
{const int length = 10;int p[length+1] = { 0,1,5,8,9,10,17,17,20,24,30 };int n;cin >> n;int* optim_income(new int[n + 1]);int* optim_solution(new int[n + 1]);mycut_roin(p, length, n, optim_income, optim_solution);cout << "The optimal income: " << optim_income[n] << endl;while (n > 0){cout << optim_solution[n] << ' ';n -= optim_solution[n];}delete[] optim_income;delete[] optim_solution;return 0;
}void mycut_roin(const int p[], int length, int n, int optim_income[], int optim_solution[])
{optim_income[0] = optim_solution[0] = 0;for (int i = 1; i <= n; i++){int max_income = INT_MIN;for (int j = 1; j <= i; j++){int pval = (j >= length) ? p[length] : p[j];if (pval + optim_income[i - j] > max_income){max_income = pval + optim_income[i - j];optim_solution[i] = j;}}optim_income[i] = max_income;}show_array(optim_income, n + 1);show_array(optim_solution, n + 1);}void show_array(int arr[], int n)
{for (int i = 0; i < n; i++){cout.width(4);cout << arr[i] << ' ';}cout << endl;
}
C++实现——动态规划法(切割钢条问题)相关推荐
- 切割钢条问题(rod cutting problem)
问题描述 Seriling公司购买长钢条,将其切割为短钢条出售.切割工序本身没有成本支出.公司管理层希望知道最佳的切割方案. 假定我们知道Serling公司出售一段长为ii ii英寸的钢条的价格为pi ...
- 算法导论动态规划切割钢条
保存已经求得的子问题解 自底向上 #ifndef _MODEL_ #define _MODEL_ #include<vector> #include<map> using st ...
- 动态规划法(五)钢条切割问题(rod cutting problem)
继续讲故事~~ 我们的主人公现在已经告别了生于斯,长于斯的故乡,来到了全国最大的城市S市.这座S市,位于国家的东南部,是全国的经济中心,工商业极为发达,是这个国家的人民所向往的城市.这个到处都 ...
- 钢条切割问题——递归求解法
这道题在算法导论(第三版)的204页 钢条切割问题是这样的: 给定一段长度为n英寸的钢条和一个价格表pi(i=1,2,...,n),求切割钢条方案,使得销售收益rn最大.注意,如果长度为n英寸的钢条的 ...
- 动态规划,java实现算法导论15章钢条切割
来自浙江理工大学在读研究生Yuner: github地址 个人博客地址 此问题dp式 :rn = max(pi + r(n-1)) 不使用dp,用普通的递归方式来求解 //使用普通的方法来计算钢条切割 ...
- 《算法导论》学习(十七)----动态规划之钢条切割(C语言)
文章目录 前言 一.钢条切割问题 1.问题背景 2.问题描述 3.问题的难点 (1)情况较多 (2)消除重复子问题 二.问题解决方案 1.问题的特点 (1)最优化子结构 (2)重复子问题 2.最优化解 ...
- 动态规划 -- 钢条切割问题
给定一段长度为n英寸的钢条和一个价格表p,求切割钢条方案(钢条的长度均为整英寸),使得销售收益最大. 我们可以计算出长度为n英寸的钢条共有2的(n-1)次方种不同的切割方案. 为解决规模为n的原问题, ...
- 《算法导论》15章-动态规划 15.1 钢条切割(含有C++代码)
一.引入 动态规划方法通常用来求解最优化问题(optimizationproblem).这类问题可以有很多可行解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解.我们称这样的解为问 题 ...
- 算法设计与分析——动态规划(二):钢条切割
分类目录:<算法设计与分析>总目录 相关文章: · 动态规划(一):基础知识 · 动态规划(二):钢条切割 · 动态规划(三):矩阵链乘法 · 动态规划(四):动态规划详解 · 动态规划( ...
最新文章
- 嵌入式开发之赛灵思 xilinx Zynq芯片简介---Zynq-7000 EPP (XC7Z010 and XC7Z020)
- 三星6.0系统手机最简单激活XPOSED框架的教程
- 程序员的一个爬虫,把估值175亿的马蜂窝给捅了
- VC++中的char,wchar_t,TCHAR(转载)
- WebKit 内核源码分析 (一) Frame
- 使用mpvue开发微信小程序——原生微信小程序、mpvue、wepy对比
- 【eclipse转idea的第一天】配置idea
- PHPCMS V9 为今天或几天前文章加new
- Python学习笔记(十)—— 高级特性
- linux平台下使用boost库
- Open3d之非阻塞可视化
- mysql 补丁 patch6_系统管理-第6部分――补丁(patch)管理和在线更新
- 用JAVA语言完成实验——猴子摘香蕉
- 企业邮箱客户端POP协议收信后,Webmail的邮件被删除,如何调整?
- 华为「天才少年」计划招募的博士们,迎来首秀!
- linux环境下常用的查找命令find、which、grep
- java8中map的新方法--replace
- BAT批处理批量修改文件后缀名
- 计算机网络利弊的作文英语作文,网络的利弊英语作文模板及范文赏析
- Chrome 刷新页面两次请求问题