第一版代码 :#include
using namespace std;
int max(int a,int b)
{
if(a>=b)return a;
else return b;
}
int cut_rod(int *p,int n)
{
int q=NULL;
if(n==0)return 0;
else for(int i=0;i<n;i...
分类:
其他好文 时间:
2015-06-03 17:38:31
阅读次数:
161
钢条切割问题现有一段长度为n英寸的钢条和一个价格表pip_i,求切割方案使销售利益最大rnr_n最大
长度为n英寸的钢条共有2n?12^{n-1}种不同的切割方案,因为可以每个整英寸的位置都可以决定切割或者不切割。
为了得到rnr_n最大,可以把这个问题分成子问题求解,先切一刀,再考虑余下的部分的最大收益即求
rnr_n=max{pk+rn?kp_k+r_{n-k}}(k=1,2,3…n-1),...
分类:
编程语言 时间:
2015-06-02 22:06:25
阅读次数:
363
问题:给定一段长度为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...
分类:
编程语言 时间:
2015-05-26 09:09:48
阅读次数:
227
我们在之前也讨论过动态规划的例子:
动态规划原理:http://blog.csdn.net/ii1245712564/article/details/45040037
钢条切割问题:http://blog.csdn.net/ii1245712564/article/details/44464689
矩阵链乘法问题:http://blog.csdn.net/ii1245712564/arti...
分类:
其他好文 时间:
2015-04-20 18:40:28
阅读次数:
372
动态规划(dynamic programming)与分治算法相似,都是通过组合子问题的解来求解原问题(在这里,“programming”指的是一种表格法,并非编写计算机程序)。分治方法将问题规划为互不相交的子问题,在将他们组合起来,求出原问题的解。与之相反,动态规划应用于子问题重叠的情况,即不同的子...
分类:
其他好文 时间:
2015-04-19 19:28:45
阅读次数:
126
我们之前提到过过动态规划的几个经典问题:
动态规划原理:http://blog.csdn.net/ii1245712564/article/details/45040037
钢条切割问题:http://blog.csdn.net/ii1245712564/article/details/44464689
矩阵链乘法问题:http://blog.csdn.net/ii1245712564/ar...
分类:
其他好文 时间:
2015-04-15 13:43:15
阅读次数:
233
#include#includeusing namespace std;//rn=max(pi+rn-1)int Cut_Rod(int *p, int n){ if (n == 0) return 0; int q = -1; for (int i = 1; i <...
分类:
其他好文 时间:
2015-04-06 21:44:11
阅读次数:
233
动态规划通常用于解决最优化问题,在这类问题中,通过做出一组选择来达到最优解。在做出每个选择的同时,通常会生成与原问题形式相同的子问题。当多于一个选择子集都生成相同的子问题时,动态规划技术通常就会很有效,其关键技术就是对每个这样的子问题都保存其解,当其重复出现时即可避免重复求解。钢条切割问题Serli...
分类:
编程语言 时间:
2015-03-17 00:31:51
阅读次数:
265
这里对这个DP问题做了代码实现,分为递归算法(自顶向下)和非递归算法(自下向上),以及拓展的自下向上算法的实现。递归算法: 1 #include 2 3 using namespace std; 4 5 int size = 10; 6 7 inline int max(int a, int ...
分类:
编程语言 时间:
2015-03-11 23:00:20
阅读次数:
277