数塔

状态方程: dp[i][j] += max (dp[i-1][j],dp[i-1][j-1]);
#include
<stdio.h>
#include
<string.h>
#include
<stdlib.h>
#include
<algorithm>

using namespace std;

int main( )
{
int T, N, i, j, t;
int dp[110][110];
scanf(
"%d",&T);
while (T--)
{
t
= 0;
memset(dp,
0, sizeof(dp));
scanf(
"%d",&N);
for (i = 0; i < N; i++)
for (j = 0; j <= i; j++)
scanf(
"%d", &dp[i][j]);
for (i = 1; i <= N; i++)
for (j = 0; j <= i; j++) {
if (j == 0)
dp[i][j]
+= dp[i-1][j];
else
dp[i][j]
+= max(dp[i-1][j], dp[i -1][j-1]);
if (dp[i][j] > t)
t
= dp[i][j];
}
printf(
"%d\n",t);
}
return 0;
}

posted on 2011-07-31 11:57  more think, more gains  阅读(132)  评论(0编辑  收藏  举报

导航