动态规划算法2

    今天用了递归来解决昨天钢管的最有切割问题,代码如下

#include <iostream>
#include <algorithm>
#include <time.h>
using namespace std;

int cut_rod(int *p, int n);
int p[1000];
int main()
{
clock_t start, finish;
double duration = 0.0;
memset(p, 0, sizeof(p));
p[0]=0;
p[1]=1;
p[2]=5;
p[3]=8;
p[4]=9;
p[5]=10;
p[6]=17;
p[7]=17;
p[8]=20;
p[9]=24;
p[10]=30;
int q = 0, n = 0; //q为最大价格,n为钢材长度,p数组为价格目录
cout << "请输入钢材的长度:";
cin >> n;
start = clock();
q = cut_rod(p, n);

cout << "最大收益为 "<< q << endl;
finish = clock();
duration = (double)(finish - start)/CLOCKS_PER_SEC;
cout << "it takes "<< duration << "seconds" <<endl;
return 0;
}

int cut_rod(int *p, int n)
{
int q = -1e8;

if (n == 0)
{
return 0;
}
else
{
for(int i = 1; i <= n; i++)
{
q = max(q, p[i] + cut_rod(p, n-i));
}
}

return q;
}

 

如果各位有好的计算时间的函数,或给数组前几个元素赋值而使后面全为0的函数麻烦告知下,哪里有写的不好的地方请指正。

这个算法的时间复杂度很高,远没有前面那个算法好,当n=30是计算时间达到了2分多钟,前面那个只要0.00000秒、、、、贴图如下,正在学习改进方法

posted @ 2013-09-05 09:57  暴走的豆浆  阅读(219)  评论(0编辑  收藏  举报