You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

73 lines
1.8 KiB

2 years ago
#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();
}