动态规划解决约瑟夫环问题
2014-03-02 18:38
148 查看
/* *约塞夫环的动态规划解法 *描述:从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) { int result = 0; //dp[1] = 0 for(int i = 2; i <= n; i++) { result = (result + m) % i; } return result; } int main() { int m, n; while(1) { cin >> m >> n; if(m * n == 0) { break; } cout << joseph(m, n) << endl; } }
相关文章推荐
- 动态规划解决0-1背包问题
- 动态规划解决最大子矩阵问题
- 循环链表解决约瑟夫环问题
- 一些可以用动态规划(DP)算法解决的问题(C++)
- 动态规划解决数字塔-数字三角形问题
- PKU 1050 动态规划-解决最大子矩阵问题
- 动态规划解决约瑟夫环问题
- 动态规划解决矩阵连乘问题
- 链表解决约瑟夫环问题
- 【动态规划】换零钱问题用一维动态规划解决,没有数量限制可以用一维
- scala 动态规划解决完全背包问题
- 用c解决约约瑟夫环问题
- 0-1背包问题,用滚动数组,动态规划解决
- leetcode 327. Count of Range Sum 字段和问题 + 动态规划DP解决 + 字段数 + 暴力求解真好
- 用“动态规划”解决最长滑雪道问题
- 循环链表解决约瑟夫环问题
- 单循环链表解决约瑟夫环问题
- 动态规划解决矩阵链乘问题的java编码实现
- 动态规划之解决多段表问题
- 用动态规划的自底向上方法解决钢材分割的问题。