本题是动态规划的入门题:数塔,从上往下沿着一条路线走下去(只能往该数的左下肩或右下肩走),能得到的最大值是多少。
用dp[105][105]记录数据,动归:dp[i][j] = max{dp[i+1][j] + dp[i][j], dp[i+1][j+1] + dp[i][j]};
1163 | Accepted | 428K | 0MS | G++ | 408B |
#include <cstdio>
int dp[105][105];
int main() {
int N,i,j;
// freopen("F:\\workspace\\sublime\\poj1163.in", "r", stdin);
for(scanf("%d", &N), i = 1; i<=N; ++i)
{
for(j=1; j<=i; ++j)
{
scanf("%d", &dp[i][j]);
}
}
for(i = N - 1; i >= 1; --i)
{
for(j=1; j<=i; ++j)
{
if(dp[i+1][j] > dp[i+1][j+1]) dp[i][j] += dp[i+1][j];
else dp[i][j] += dp[i+1][j+1];
}
}
printf("%d", dp[1][1]);
return 0;
}