|
|
|
|
#include<bits/stdc++.h>
|
|
|
|
|
|
|
|
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
// https://blog.csdn.net/theonegis/article/details/45801201
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
/* <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> */
|
|
|
|
|
/************************************************************************/
|
|
|
|
|
const int N = 50;//Ϊ<><CEAA><EFBFBD>㷨д<E3B7A8><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><F2B5A5A3><EFBFBD><EFBFBD>ﶨ<EFBFBD><EFB6A8>һ<EFBFBD><D2BB><EFBFBD>㹻<EFBFBD><E3B9BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>(Ϊ<>˱<EFBFBD><CBB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>̬<EFBFBD><CCAC><EFBFBD><EFBFBD><EFBFBD>ռ䣬<D5BC><E4A3AC><EFBFBD><EFBFBD><EFBFBD>Ļ<EFBFBD><C4BB>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƚ<EFBFBD><C8BD>鷳<EFBFBD><E9B7B3><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB>Ϊ<EFBFBD><CEAA><EFBFBD>㷨<EFBFBD><E3B7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
|
|
|
|
|
int data[N][N];//<2F>洢<EFBFBD><E6B4A2><EFBFBD><EFBFBD>ԭʼ<D4AD><CABC><EFBFBD><EFBFBD>
|
|
|
|
|
int dp[N][N];//<2F>洢<EFBFBD><E6B4A2>̬<EFBFBD>滮<EFBFBD><E6BBAE><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
int n;//<2F><><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD>
|
|
|
|
|
|
|
|
|
|
/*<2A><>̬<EFBFBD>滮ʵ<E6BBAE><CAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>*/
|
|
|
|
|
void tower_walk()
|
|
|
|
|
{
|
|
|
|
|
// dp<64><70>ʼ<EFBFBD><CABC>
|
|
|
|
|
for (int i = 0; i < n; ++i)
|
|
|
|
|
{
|
|
|
|
|
dp[n - 1][i] = data[n - 1][i];
|
|
|
|
|
}
|
|
|
|
|
int temp_max;
|
|
|
|
|
for (int i = n - 1; i >= 0; --i)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j <= i; ++j)
|
|
|
|
|
{
|
|
|
|
|
// ʹ<>õ<EFBFBD><C3B5>ƹ<EFBFBD>ʽ<EFBFBD><CABD><EFBFBD><EFBFBD>dp<64><70>ֵ
|
|
|
|
|
temp_max = max(dp[i + 1][j], dp[i + 1][j + 1]);
|
|
|
|
|
dp[i][j] = temp_max + data[i][j];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/*<2A><>ӡ<EFBFBD><D3A1><EFBFBD>ս<EFBFBD><D5BD><EFBFBD>*/
|
|
|
|
|
void print_result()
|
|
|
|
|
{
|
|
|
|
|
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD>" << dp[0][0] << '\n';
|
|
|
|
|
int node_value;
|
|
|
|
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ԫ<EFBFBD><D4AA>
|
|
|
|
|
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD>·<EFBFBD><EFBFBD><EFBFBD><EFBFBD>" << data[0][0];
|
|
|
|
|
int j = 0;
|
|
|
|
|
for (int i = 1; i < n; ++i)
|
|
|
|
|
{
|
|
|
|
|
node_value = dp[i - 1][j] - data[i - 1][j];
|
|
|
|
|
/* <20><><EFBFBD><EFBFBD>node_value == dp[i][j]<5D><>˵<EFBFBD><CBB5>
|
|
|
|
|
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>data[i][j]<EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD><EFBFBD><EFBFBD>node_value == dp[i][j + 1]<EFBFBD><EFBFBD>˵<EFBFBD><EFBFBD>
|
|
|
|
|
<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>data[i][j + 1]
|
|
|
|
|
*/
|
|
|
|
|
if (node_value == dp[i][j + 1]) ++j;
|
|
|
|
|
cout << "->" << data[i][j];
|
|
|
|
|
}
|
|
|
|
|
cout << endl;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
int main()
|
|
|
|
|
{
|
|
|
|
|
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>";
|
|
|
|
|
cin >> n;
|
|
|
|
|
cout << "<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ľڵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<28><>i<EFBFBD><69><EFBFBD><EFBFBD>i<EFBFBD><69><EFBFBD>ڵ<EFBFBD>)<29><>\n";
|
|
|
|
|
for (int i = 0; i < n; ++i)
|
|
|
|
|
{
|
|
|
|
|
for (int j = 0; j <= i; ++j)
|
|
|
|
|
{
|
|
|
|
|
cin >> data[i][j];
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
tower_walk();
|
|
|
|
|
print_result();
|
|
|
|
|
}
|
|
|
|
|
|