动态规划问题的两种处理方式:自底向上和自上向下。
各自有各自的优势,以算法导论上的钢铁切割为例,贴出代码缓存一下。
int maxvalue(int cur_length, int left)
{
int value1 = 0;
if (a[left] || left == 0)
{
value1 = a[left];
}
else
{
value1 = maxvalue(1, left - 1);
a[left] = value1;
}
int temp = value[cur_length] + value1;
if (left == 0)
{
return temp;
}
else
{
int cur_temp = maxvalue(cur_length + 1, left - 1);
if (temp > cur_temp)
{
return temp;
}
else
{
return cur_temp;
}
}
}
int maxvalue(int length)
{
for (int i = 1; i < length; i++)
{
int p = 0, temp = 0;
for (int j = 1; j <= i; j++)
{
temp = value[j] + a[i];
if (p < temp)
{
p = temp;
root[i] = j;//每次记忆当前取的长度
}
}
a[i] = p;
}
}