日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

蘑菇阵(动态规划)

發布時間:2024/7/23 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 蘑菇阵(动态规划) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

題目:
現在有兩個好友甲和B,住在一片長有蘑菇的由n * m個個方格組成的草地,A在(1,1),B在(N,M)。現在甲想要拜訪B,由于她只想去乙的家,所以每次她只會走(I,J + 1)或第(i + 1,j)的這樣的路線,在草地上有?個蘑菇種在格子里(多個蘑菇可能在同一方格),問:甲如果每一步隨機選擇的話(若她在邊界上,則只有一種選擇),那么她不碰到蘑菇走到乙的家的概率是多少?
鏈接:https://www.nowcoder.com/questionTerminal/ed9bc679ea1248f9a3d86d0a55c0be10

我對這道題的思路是:

  • 用兩個二維數組分別來存放蘑菇陣和每一步的幾率,這兩個數字是一一對應的。
  • 將第一步視作概率為一
  • 在對應的格子中記錄從每個格子開始走的幾率,判斷依據是:如果這個格子是邊界,那么只有一條路,所以概率為1,如果這個格子里有蘑菇,那么概率一定是0,否則這個從這個格子出發的概率為0.5
  • 將之前的概率與現在的概率相乘,得到并記錄從這個格子出發的概率
  • #include <iostream> #include <vector> #include <iomanip>using namespace std;int main() {int n,m,k;while(cin >> n >> m >> k){//由于這里的坐標是從(1,1)開始的,所以將數組的大小定義為n+1*m+1vector<vector<int> > Lawn((n+1),vector<int>(m+1));vector<vector<double> > Ret((n+1),vector<double>(m+1));//將Lwan中的種上蘑菇for(size_t i = 0; i < k; ++i){int x,y;cin >> x >> y;Lawn[x][y] = 1;}//將開始位置初始化為1.0Ret[1][1] = 1.0;//開始一層一層的看Lawn中的路線中的蘑菇for(size_t i = 1; i < n+1; ++i){for(size_t j = 1; j < m+1; ++j){//如果著塊草地有蘑菇,無論怎么走都是0if(1 == Lawn[i][j]){Ret[i][j] = 0;continue;}if(!(1 == i && 1 == j)){//如果是邊界,那幾率就是1,因為只有一條路Ret[i][j] = Ret[i-1][j]*(j == m ? 1.0:0.5) + Ret[i][j-1]*(i == n ? 1.0:0.5);}}}cout << fixed << setprecision(2) << Ret[n][m] << endl;}return 0; }

    總結

    以上是生活随笔為你收集整理的蘑菇阵(动态规划)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。