您的位置:首页 > 其它

钢条切割2(15章:动态规划)。。。2014.5.26

2014-05-26 10:44 218 查看
#include <STDLIB.H>
#include <STDIO.H>
#define N 100
//加入备忘机制的自顶向下法。
int maxim(int a,int b)//求最大值
{
if(a>=b)
return a;
else
return b;
}

int MEMOIZED_CUT_ROD_AUX(int p
,int n,int r
)//在自顶向下的递归实现的方法下加入了备忘的机制。
{
int q,i;
if(r
>=0)
return r
;//若是n已经算出了最大收益,则不会再继续分割下去了,直接返回n的收益值。
if(n==0)
q=0;
else
for(i=1;i<=n;i++)//若备忘机制处n所对应的r
<0则说明n的值没有算出了来。继续调用函数分割计算。
q=maxim(q,p[i]+MEMOIZED_CUT_ROD_AUX(p,n-i,r));

r
=q;
return r
;
}

int MEMOIZED_CUT_ROD(int p
,int n)
{
int i,r
;
for(i=0;i<=n;i++)//将辅助数组r
全部初始化为最小。
r[i]=-32768;
return MEMOIZED_CUT_ROD_AUX(p,n,r);
}

int main()
{
int P
,i,x;
for(i=0;i<N;i++)
P[i]=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;
x=MEMOIZED_CUT_ROD(P,4);
printf("%d \n",x);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: