一、題目描述
棋盤上 aa 點有乙個過河卒,需要走到目標 bb 點。卒行走的規則:可以向下、或者向右。同時在棋盤上 cc 點有乙個對方的馬,該馬所在的點和所有跳躍一步可達的點稱為對方馬的控制點。因此稱之為「馬攔過河卒」。
棋盤用座標表示,aa 點 (0, 0)(0,0)、bb 點 (n, m)(n,m),同樣馬的位置座標是需要給出的。
現在要求你計算出卒從 aa 點能夠到達 bb 點的路徑的條數,假設馬的位置是固定不動的,並不是卒走一步馬走一步。
輸入格式
一行四個正整數,分別表示 bb 點座標和馬的座標。
輸出格式
乙個整數,表示所有的路徑條數。
輸入輸出樣例
輸入 #1複製
6 6 3 3
輸出 #1複製
6說明/提示
對於 100 %100% 的資料,1 \le n, m \le 201≤n,m≤20,0 \le0≤ 馬的座標 \le 20≤20。
二、解題思路(學習成果)
首先可以感知到這是乙個動態規劃的題目。
這時候就是要分為兩個部分來解決問題,第乙個特殊點的確定,第二個轉移方程
特殊點的確定
1、棋盤上馬點和馬可到達的點
2、邊界點(因為邊界只有一種走法)
如以上的圖,設定不可走點為-1,在邊界點上如果一直沒有遇到紅點的話就可以設定為1,遇到紅點不用設定,預設為0,因為無法走一下的邊界點(這裡無法理解的,想想卒無法向左向上走)
三、之後是核心方程,map[i][j]=map[i-1][j]+map[i][j-1]
如何理解,就是從後往前推,這個點的可走條數是右點可走條數加上上點可走條數之和。
**如下:
#includeusing namespace std;
typedef long long int ll;
ll map[25][25]=;//定義乙個棋盤
int a,b,n,m,mn[9]=,mm[9]=;//這兩個陣列是判斷八個點。
void setr()
for(i=0;i<=b;i++)//設定邊緣,行
}for(i=0;i<=a;i++)//設定邊緣,列
}}int main()
//核心方程
}/* for(int i=0;i<=a;i++)
cout<}
cout
}
打卡第一天
打卡第一天 昨天做了兩套綜合,沒有做物理 記了30個單詞,今天再看時發現效果不是很好,導致今天再看時花費的時間有點長,晚上應該再看看複習一下的 昨天下了keep鍛鍊並測試了一下,用了1個小時,感覺很好,今天要繼續。昨天的時間安排的有些都沒完成,中午有點偷懶在寢室就沒來教室寫試卷,晚上就在弄點贊幣轉賬...
第一天打卡
希望自己能成為乙個夢想鑄造師 toc 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下markdown的基本語法知識。全新的介面設計,將會帶來全新的寫作體驗 在創作中心設定你喜愛的 高亮樣式,markdown將 片...
第一天打卡
部落格第一天 實力打卡,記錄點滴。有進步就好,最起碼了解自己,知道自己幹什麼了。回想今天,工作最開心的就是和客戶溝通,了解問題,解決問題。即使沒有任務在手,幫解決問題,心情也挺好。喜歡這樣的客戶,也許這樣的客戶也喜歡我這樣的吧!我時刻保持一種想的美的心態。才不會很累。忘掉過去。近期在讀一本書,書的名...