UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2
题目
https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=1883
题意
共有n个数(1..n)围成一个首尾相接的环,从m开始删除,每隔k个删除,最后留下来的是几?
思路
如刘书,首先是要找到递推关系。
1. 把起点视作编号0,f[n]为还剩下n个数(编号当然是紧挨的)的时候留下的最后一个编号,那么,明显f[n]与f[n - 1]有关系
2. 具体有什么关系呢?f[n]剩下的最后一个元素对应n个编号,删除第0个,重新以第k个编号为新起点的n-1个元素对应的f[n - 1],对应到公式上为(f[i - 1] + k - 1) % (i - 1) + 1
3. 现在不是从0开始,而是从m开始,也就是说最后还存在一个关系为:编号j的元素对应的值为(j + m - 1) % n + 1
感想
1. 和刘汝佳的算的不一致,不太理解刘书怎么算的,也许定义方式略有不同?
代码
#include <algorithm> #include <cassert> #include <cmath> #include <cstdio> #include <cstring> #include <iostream> #include <map> #include <queue> #include <set> #include <string> #include <tuple> #define LOCAL_DEBUG using namespace std; const int MAXN = 1e4 + 4; int f[MAXN];int main() { #ifdef LOCAL_DEBUGfreopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\input.txt", "r", stdin);//freopen("C:\\Users\\Iris\\source\\repos\\ACM\\ACM\\output.txt", "w", stdout); #endif // LOCAL_DEBUG//int T; // scanf("%d", &T);int n, k, m;for (int ti = 1;scanf("%d%d%d", &n, &k, &m) == 3 && n; ti++) {f[1] = 0;for (int i = 2; i <= n; i++) {f[i] = (f[i - 1] + k - 1) % (i - 1) + 1;}int ans = (m - 1 + f[n]) % n;printf("%d\n", ans + 1);}return 0; }
View Code
转载于:https://www.cnblogs.com/xuesu/p/10419344.html
UVa LA 3882 - And Then There Was One 递推,动态规划 难度: 2相关推荐
- UVa 10934 Dropping water balloons:dp(递推)
题目链接:https://vjudge.net/problem/27377/origin 题意: 有一栋n层高的楼,并给你k个水球.在一定高度及以上将水球扔下,水球会摔破:在这个高度以下扔,水球不会摔 ...
- 递推DP UVA 1366 Martian Mining
题目传送门 1 /* 2 题意:抽象一点就是给两个矩阵,重叠的(就是两者选择其一),两种铺路:从右到左和从下到上,中途不能转弯, 3 到达边界后把沿途路上的权值相加求和使最大 4 DP:这是道递推题, ...
- UVa 12627:Erratic Expansion(递推)
题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=844& ...
- UVa LA 4253 UVa 1421 Archery 枚举,状态削减,oj错误题目 难度: 1
题目 https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&a ...
- LA 3882 And Then There Was One
解题思路:分析要好久,懒得分析了,贴了某大牛的的分析,代码就是我自己写的. N个数排成一圈,第一次删除m,以后每k个数删除一次,求最后一被删除的数. 如果这题用链表或者数组模拟整个过程的话,时间复杂度 ...
- Uva 10074【递推dp】
UVa 10074 题意:求01矩阵的最大子0矩阵. http://www.csie.ntnu.edu.tw/~u91029/MaximumSubarray.html#2 这里说的很清楚.先求Larg ...
- UVA 11021 - Tribles(概率递推)
UVA 11021 - Tribles 题目链接 题意:k个毛球,每一个毛球死后会产生i个毛球的概率为pi.问m天后,全部毛球都死亡的概率 思路:f[i]为一个毛球第i天死亡的概率.那么 f(i)=p ...
- UVA - 11300 Spreading the Wealth 中位数,递推
UVA - 11300 Spreading the Wealth 题意: 有n个人,每个人都有一些钱,每个人都可以把任意的钱分给左右相邻的两个人(第一个人可以把钱分给第二个人和第 n 个人),求最少需 ...
- UVa 11021 (概率 递推) Tribles
Tribble是麻球? 因为事件都是互相独立的,所以只考虑一只麻球. 设f(i)表示一只麻球i天后它以及后代全部死亡的概率,根据全概率公式: f(i) = P0 + P1 * f(i-1) + P2 ...
最新文章
- python datetime.datetime 当前_python之time和datetime的常用方法
- POJ3133(插头dp)
- 乐理 music theory
- java邮件客户端源代码,JAVA基于B/S模式下的电子邮件客户端软件,源码分享
- WebDriver介绍
- android Formatter 的使用
- IntelliJ IDEA 2017.2 x64 安装Scala
- C语言知识分享:面向对象和面向过程到底是怎么回事?
- php redis 集群 长连接池,php如何实现redis连接池
- 国内首款 FPGA 云服务器,性能是通用 CPU 服务器 30 倍以上
- fantastical2语言设置_如何为iPhone定制Fantastical2以适应您的需求
- 不同手机型号图文预览_手机支持型号汇总
- 毫米和像素怎么换算_自己计算出来的关于像素和厘米单位的换算
- 从《沟通与说服必读12篇》到《影响力》,十大经典沟通类书籍推荐
- 男朋友向女朋友打的辞职报告
- LifecycleOwner xx is attempting to register while current state is RESUMED. LifecycleOwners must cal
- Javascript 实现一个分钟秒钟倒计时器
- mcnpf5输出结果_MCNP学习笔记-计数卡F6
- 【转载】自然界通用的“质子缓存”模型
- python条形图颜色设置_在matplotlib Python中设置不同的条形图颜色