計蒜客 T2091 傳紙條
阿新 • • 發佈:2021-07-28
題目連結:計蒜客 T2091 傳紙條
題目大意:
題解:
由題意可知兩路不會相交,設\(dp[i][j][k]\)表示下面的那條路走到\((i,j)\),上面那條路走到\((k, i+j-k)\)時好感程度的最大值,則狀態轉移方程為:
由於\(i\neq k\),所以答案不能直接輸出\(dp[n][m][n]\),因為右下角的好感程度一定為\(0\) ,所以輸出右下角的上一步\(dp[n][m-1][n-1]\)。
#include <iostream> using namespace std; int dp[100][100][100], n, m, a[51][51]; int max_4(int a, int b, int c, int d) { return max(a, max(b, max(c, d))); } int main() { ios::sync_with_stdio(false), cin.tie(0), cout.tie(0); cin >> n >> m; for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { cin >> a[i][j]; } } for (int i = 1; i <= n; ++i) { for (int j = 1; j <= m; ++j) { for (int k = 1; k < i; ++k) { if (i != k) { dp[i][j][k] = max_4(dp[i - 1][j][k - 1], dp[i - 1][j][k], dp[i][j - 1][k - 1], dp[i][j - 1][k]) + a[i][j] + a[k][i + j - k]; } } } } cout << dp[n][m - 1][n - 1]; return 0; }