'commit'
This commit is contained in:
72
C++专题课程/动态规划/数塔问题/数塔问题.cpp
Normal file
72
C++专题课程/动态规划/数塔问题/数塔问题.cpp
Normal file
@@ -0,0 +1,72 @@
|
||||
#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>
|
||||
<09><>һ<EFBFBD><D2BB>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>data[i][j]<5D><>
|
||||
<09><><EFBFBD><EFBFBD>node_value == dp[i][j + 1]<5D><>˵<EFBFBD><CBB5>
|
||||
<09><>һ<EFBFBD><D2BB>Ӧ<EFBFBD><D3A6><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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user