(相關資料圖)
原題鏈接
這是一道經典的動態(tài)規(guī)劃題目。
如果嘗試使用深度優(yōu)先搜索(dfs)或廣度優(yōu)先搜索(bfs)做就會獲得 TLE (注意數據范圍)。于是我們想到了更為高級的動態(tài)規(guī)劃(Dynamic Programming, dp)。
簡略介紹動態(tài)規(guī)劃算法的核心思想:把原問題分解為相對簡單的子問題的方式求解復雜問題。與遞推有幾分相似?遞推其實是動態(tài)規(guī)劃的一個分支!
在求解動態(tài)規(guī)劃這一類問題時,一般有三步:
在這道題目中,可以使用一個二維數組 dp[n][m] 來存放每一個子問題的答案,即用 dp[i][j] 來表示到達第i行第j列所需的最多步數,dp[n][m] 也就是答案了。
由于過河卒初始就在第0列第0行,所以 dp[0][0] = 1;而他只能向下走或向右走,當在第0行或第0列時,情況只有1種。
動態(tài)規(guī)劃一類題目中的最關鍵部分。過河卒只能向下走或向右走,故 dp[i][j] = dp[i-1][j] + dp[i][j-1]。
注意:還要注意馬可以到達的地方,過河卒不能到達。
1 #include2 using namespace std; 3 const int N = 25; 4 const int dir[][2] = { 5 {1, 2}, {1, -2}, {2, 1}, {2, -1}, 6 {-1, 2}, {-1, -2}, {-2, 1}, {-2, -1} 7 }; 8 long long dp[N][N]; 9 int n, m, sx, sy;10 bool vis[N][N];11 int main() {12 cin >> n >> m >> sx >> sy;13 vis[sx][sy] = true;14 for (int i = 0; i < 8; i ++){15 int tx = sx + dir[i][0];16 int ty = sy + dir[i][1];17 if (tx >= 0 && tx <= n && ty >= 0 && ty <= m)18 vis[tx][ty] = true;19 }20 dp[0][0] = 1;21 for (int i = 0; i <= n; i ++)22 for (int j = 0; j <= m; j ++)23 if (!vis[i][j]){24 if (i) dp[i][j] += dp[i - 1][j];25 if (j) dp[i][j] += dp[i][j - 1];26 }27 cout << dp[n][m];28 return 0;29 }
關鍵詞:
新聞發(fā)布平臺 |科極網 |環(huán)球周刊網 |tp錢包官網下載 |中國創(chuàng)投網 |教體產業(yè)網 |中國商界網 |萬能百科 |薄荷網 |資訊_時尚網 |連州財經網 |劇情啦 |5元服裝包郵 |中華網河南 |網購省錢平臺 |海淘返利 |太平洋裝修網 |勵普網校 |九十三度白茶網 |商標注冊 |專利申請 |啟哈號 |速挖投訴平臺 |深度財經網 |深圳熱線 |財報網 |財報網 |財報網 |咕嚕財經 |太原熱線 |電路維修 |防水補漏 |水管維修 |墻面翻修 |舊房維修 |參考經濟網 |中原網視臺 |財經產業(yè)網 |全球經濟網 |消費導報網 |外貿網 |重播網 |國際財經網 |星島中文網 |手機測評 |品牌推廣 |名律網 |項目大全 |整形資訊 |整形新聞 |美麗網 |佳人網 |稅法網 |法務網 |法律服務 |法律咨詢 |成報網 |媒體采購網 |聚焦網 |參考網
中國資本網 版權所有
Copyright © 2011-2020 亞洲資本網 All Rights Reserved. 聯系網站:55 16 53 8 @qq.com