動態規劃求解數字數字三角形

ZHUO_SIR發表於2018-10-28
#include"stdafx.h"
#include<iostream>
#include<stdio.h>
#include<string.h>
using namespace std;
#define N 100
int MAXSUM(int a[][N], int n, int x[])
{
	int i, j, t;
	for (i = n - 1; i >= 1; i--) {   //從最底層開始尋找
		for (j = 1; j <= i; j++) {  //每行遍歷
			if (a[i + 1][j]>a[i + 1][j + 1]) {   //左邊分支大
				a[i][j] += a[i + 1][j];
				t = a[i + 1][j];   //用於記錄路徑

			}
			else {     //右邊分支大
				a[i][j] += a[i + 1][j + 1];
				t = a[i + 1][j + 1];      //用於記錄路徑
			}
		}
		x[i] = t;
	}
	return a[1][1];    //一直累加到頂端
}

void main()
{

	int i, j, n, first;
	int a[N][N], x[N];
	printf("需要輸入多少層的三角形?\n");
	cin >> n;
	printf("開始輸入數字三角形資料:\n");
	for (i = 1; i <= n; i++) {
		for (j = 1; j <= i; j++) {
			cin >> a[i][j];
		}
	}
	first = a[1][1];
	printf("第一層到最後一條路經過的權值最大值為: %d\n", MAXSUM(a, n, x));
	printf("所經過的路徑是:\n");
	printf("%d->", first);
	for (i = 1; i <= n - 2; i++) {
		printf("%d->", x[i] - x[i + 1]);
	}
	printf("%d\n", x[n - 1]);
	getchar();
}

執行結果如下:

相關文章