1. 程式人生 > >數塔 HDU 2084——(動態規劃)

數塔 HDU 2084——(動態規劃)

思路:從上往下推,數越來越多,結果狀態太多,不好處理;則由下往上推,越往上數越少,最終歸於一個數。

狀態方程:dp[i][j] = max(dp[i+1][j], dp[i+1][j+1])+a[i][j];

C++程式碼實現:

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
int dp[102][102], a[102][102];
int main()
{
	int C, n, i, j;
	scanf("%d", &C);
	while(C--)
	{
		scanf("%d", &n);
		for(i=1; i<=n; i++)
		{
			for(j=1; j<=i; j++)
			{
				scanf("%d", &a[i][j]);
			}
		}		
		memset(dp, 0, sizeof(dp));
		for(i=n; i>0; i--)
		{
			for(j=1; j<=i; j++)
			{
				dp[i][j] = max(dp[i+1][j], dp[i+1][j+1]) + a[i][j];
			}
		}
		printf("%d\n", dp[1][1]);
	}
	return 0;
}