利用动态规划方法求解数字三角形
来源:百度知道 编辑:UC知道 时间:2024/06/01 22:41:51
任务一可以枚举吧?阶数不大``
任务二的话可以试从倒数第二行开始计算
把倒数第二行中每一个数向下加的2个和之中取较大者并记录和数及路径,这样有99个记录
再对倒数第三行做同样工作,有98个记录
如此类推即可,这样如果是用计算机做的话,可以节省相当多内存``因为记录的工作只是不断舍去一个记录并为留下来的记录只添加1个分量以记录路径
二维的.
-------------
#include <stdio.h>
#define SIZE 100
#define max(a,b) ((a) > (b) ? (a) : (b))
int main()
{
int data[SIZE][SIZE];
int n;
scanf("%d",&n);
scanf("%d",data[0]);
int maxSum = data[0][0];
for(int i = 1; i < n; ++i)
{
scanf("%d",data[i]);
data[i][0] += data[i - 1][0];
maxSum = max(maxSum,data[i][0]);
for(int j = 1; j < i; ++j)
{
scanf("%d",data[i] + j);
data[i][j] += max(data[i - 1][j - 1], data[i - 1][j]);
maxSum = max(maxSum, data[i][j]);
}
scanf("%d",data[i] + i);
data[i][i] += data[i - 1][i - 1];