It feels good to do water problems ....
1:1
2:1 2
3:1 2 3
4:1 2 3 4
5:1 2 3) 4 5
DP[I][J] The maximum value obtained from the number of J of line I
DP[I][J] = max (dp[i-1][j-1], dp[i-1][j]) + a[i][j].
/*********************************************************problem:2084 (several towers) Judge status:acceptedrunid:1452501 6 language:g++ Author:g_lorycode render status:rendered by Hdoj g++ Code render Version 0.01 beta************* /#include <iostream> #include <cstdio> #include < Algorithm>using namespace Std;int a[105][105];int dp[105][105];int n;void Solve () {for (int i = 1; I <= N; ++i) { for (int j = 1; J <= i; ++j) {Dp[i][j] = max (Dp[i-1][j], dp[i-1][j-1]) + a[i][j]; }} int ans = dp[n][1]; for (int i = 2; I <= N; ++i) {ans = max (ans, dp[n][i]); } printf ("%d\n", ans);} int main () {int t; scanf ("%d", &t); while (t--) {scanf ("%d", &n); for (int i = 1; I <= N; ++i) for (int j = 1; J <= i; ++j) scanf ("%d", &a[i][j]); Solve (); } return 0;}
HDU 2084 Tower (simple DP)