uva 1452 - jump
約瑟夫環。對於乙個n個人,沒k個踢出去的約瑟夫環。踢出乙個人後,環成了
0, 1, 2, ... ,k-2, k, k+1, ... ,n
對其從k為起點重新編號
n-k+1, n-k+2, ... ,n-1, 0, 1, 2, ...n-k
這樣變成了乙個(n-1, k)的約瑟夫環問題。
於是得到轉移方程
dp[i] = (dp[i-1] + k) % i;
而題目還要去得出倒數第二個出去的和倒數第三個出去的。
其轉移如上,但是
初始化倒數第二個出去的 dp[2] = (k+1)%2;
初始化倒數第三個出去的 dp[3] = (k+2)%3;
#include int n, k;
int dp0[1000000+5];
int dp1[1000000+5];
int dp2[1000000+5];
int main ()
dp1[2] = (k+1)%2;
for (int i=3; i<=n; i++)
dp2[3] = (k+2)%3;
for (int i=4; i<=n; i++)
printf ("%d %d %d\n", dp2[n]+1, dp1[n]+1, dp0[n]+1);
} return 0;
}
UVA 1452 Jump 約瑟夫環變式
題目大意 給出n,m,約瑟夫環共n項,每數到m殺乙個人,問剩下的倒數第3個人 倒數第2個人 倒數第1個人的編號分別是多少 題解 因為我們都知道求約瑟夫環問題是f 1 0,f n f n 1 k i 所以一開始我的想法是就用同樣的方法來推倒數第2個人,f 2 0,f n f n 1 k i 但是得出的...
UVA133 約瑟夫環變種
為了縮短領救濟品的隊伍,nnglrp決定了以下策略 每天所有來申請救濟品的人會被放在乙個大圓圈,面朝裡面。選定乙個人為編號 1 號,其他的就從那個人開始逆時針開始編號直到 n。乙個 一開始逆時針數,數 k 個申請者,然後另乙個 第 n 個始順時針方向數 m 個申請者,這兩個人就被送去再教育。如果兩個...
數學小技巧 UVA 1394 約瑟夫環
約瑟夫環問題 詳解 約瑟夫環 約瑟夫問題 是乙個數學的應用問題 已知n個人 以編號1,2,3.n分別表示 圍坐在一張圓桌周圍。從編號為k的人開始報數,數到m的那個人出列 他的下乙個人又從1開始報數,數到m的那個人又出列 依 此規律重複下去,直到圓桌周圍的人全部出列。通常解決這類問題時我們把編號從0 ...