動態規劃解決約瑟夫環問題

2021-06-20 17:53:12 字數 572 閱讀 8035

/*

*約塞夫環的動態規劃解法

*描述:從0到n-1編號,從1到m報數,每次報m的出局,求最後乙個出局者

*建模:設dp[i]表示長度為i,從1到m報數子問題的解

*分析:對於長為i個進行編號,0..1...i-1,則第乙個出局者為(m-1)%i,對剩餘i-1

*個重新編號,m%i -->0 (m+1)%i --> 1 (m+i-2)%i --> i-2,則出局者當前編號為dp[i-1],對映回i時

*的編號為(m+dp[i-1])%i,由此可知dp[i] = (dp[i-1]+m)%i;

*dp: dp[i] = (dp[i-1]+m)%i;

*//*

*m:報數長度

*n:總人數

*return:n個人從0..n-1編號的編號

*//*

int joseph(int m, int n)

return result;

}int main()

cout << joseph(m, n) << endl; }

}

約瑟夫環問題的解決

約瑟夫環問題介紹 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為1的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依此規律重複下去,直到圓桌周圍的人全部出列。include include include typedef int datat...

python解決約瑟夫環問題

問題描述 編號為 1 n 的 n 個士兵圍坐在一起形成乙個圓圈,從編號為 1 的士兵開始依次報數 1,2,3 這樣依次報 數到 m 的 士兵會被殺死出列,之後的士兵再從 1 開始報數。直到最後剩下一士兵,求這個士兵的編號。有用遞迴函式 f n,m 的返回結果是存活士兵的編號,推導出old 與 new...

c 解決約瑟夫環問題

c 解決約瑟夫環問題 約瑟夫 josephus 問題 m個人圍坐成一圈,從1開始順序編號 遊戲開始,從第乙個人開始由1到n迴圈報數 報到m的人退出圈外問 最後留下的那個人原來的序號 本題可以定義乙個容器 vector 初始化大小 元素個數 為n。容器裡元素的值標識該人是否出局,1在圈內,0出局。值為...