从第m个人开始的约瑟夫问题dp解法

该博客探讨了有n个人围成一圈,从第m个人开始,每次杀掉k个位置后的人,求最后一个生存者的问题。通过动态规划方法解决,当k可能大于n时,需要对位置进行特殊处理,以确保解法的正确性。博客提供了输入输出示例,并指出朴素解法的时间复杂度问题。
摘要由CSDN通过智能技术生成

有n个人围成一圈,第一次杀掉第m个人,之后每次杀掉往后数k个数位置的人,求最后一个活着的人的位置。

Input
多组输入,每行三个数n,k,m
2 ≤ n ≤ 10000, 1 ≤ k ≤ 10000, 1 ≤ m ≤ n
最后一行为0,0,0

Output
每组数据输出一行表示最后活下来的人的位置

Sample Input 1
8 5 3
100 9999 98
10000 10000 10000
0 0 0

Sample Output 1
1
93
2019


1000ms,朴素铁定T

由于一开始就要毙掉第m号,众所周知原版的dp解法是把杀掉的第一个人(也就是第k号)转换到第0号位置,所以这里就要把第一个杀掉的第m号位置转到第k号位置来满足原版的dp解法。也就是-(k-m)
这题k可以大于n,所以%n,为防止出现0和-1,后续再取模。

#include <bits/s
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值