动态规划完成数塔

动态规划完成数塔:

// 数塔.cpp: 定义控制台应用程序的入口点。
//

#include "stdafx.h"

#include <stdio.h>
#define N 5
int a[N][N];
int data[N][N];
int dir[N][N];

int main(int argc, char** argv) {
    int i, j, left, right;
    for (i = 0; i<N; i++) //init
    {
        for (j = 0; j<N; j++)
        {
            a[i][j] = 0;
            data[i][j] = 0;
            dir[i][j] = 0;
        }
    }
    for (i = 0; i<N; ++i)//input a[N][N]
    {
        for (j = 0; j <= i; ++j)
        {
            scanf_s("%d", &a[i][j]);
        }
    }
    for (i = N - 1; i >= 0; --i)//from the bottle to the top,dir[][] record the path
    {
        for (j = 0; j <= N - 1; ++j)
        {
            if (i == N - 1) {
                data[i][j] = a[i][j];
            }
            else {
                left = data[i + 1][j];
                right = data[i + 1][j + 1];
                if (left>right) {
                    data[i][j] = left + a[i][j];
                    dir[i][j] = 1;// 1 represent go to left,thereby 2 represent go to right
                }
                else {
                    data[i][j] = right + a[i][j];
                    dir[i][j] = 2;
                }
            }
        }
    }
    printf("The numbers-town's max number is :%d\n", data[0][0]);
    printf("The path is:\n");
    i = 0;
    j = 0;
    while (i<N - 1) {
        if (i == 0) {
            printf("%d\n", a[i][j]);
        }
        if (dir[i][j] == 1) {
            printf("%d\n", a[i + 1][j]);
            i++;
        }
        else if (dir[i][j] == 2) {
            printf("     %d\n", a[i + 1][j + 1]);
            i++;
            j++;
        }
        else;

    }
    return 0;

}


这里写图片描述

猜你喜欢

转载自blog.csdn.net/nockinonheavensdoor/article/details/80751204