| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 码蹄集 - MT2011 · 硬币塔 -> 正文阅读 |
|
[数据结构与算法]码蹄集 - MT2011 · 硬币塔 |
硬币塔时间限制:1秒 题目描述看不懂题目的可以直接点这里 一个k级的硬币塔从下到上,由1个银币,一个k-1级硬币塔,k个金币,一个k-1级硬币塔,1个银币堆成。0级硬币塔只有一个金币。问n级硬币塔从下向上数i个有几个金币。 输入描述一行用空格隔开的两个整数n,i 输出描述一个整数表示答案 样例一输入
输出
题目分析
下面是鄙人通俗的解释: 题目描述硬币塔: 由包含金币和银币的一摞硬币组成。 如下图所示,金色方块表示金币,灰色方块表示银币。 0阶硬币塔的组成方式为:只有一个金币 高阶硬币塔: 由低阶硬币塔和数个硬币组成。 k阶硬币塔的组成方式为:从下到上,1个银币,1个k-1阶硬币塔,k个金币,1个k-1阶硬币塔,1个银币堆成。( k ≥ 1 k\geq1 k≥1) 输入描述输入为一行空格隔开的两个正整数 k k k 和 n n n 其中 k k k 代表这组样例是一个 k k k 阶硬币塔 数据范围:
输出描述输出一行一个正整数,代表这个 k k k 阶硬币塔从下往上数 n n n 个硬币,其中金币有多少个。 样例一样例输入
样例输出
样例解释如图所示是一个2阶硬币塔,其最下面的4个硬币中共有2个是金币,因此输出答案2。 题目分析这题硬币塔高度的增长速度是指数级的 如果用 h e i g h t [ i ] height[i] height[i] 代表 i i i 阶硬币塔的高度,那么很容易有: h e i g h t [ i ] = 1 + h e i g h t [ i ? 1 ] + i + h e i g h t [ i ? 1 ] + 1 height[i] = 1 + height[i - 1] + i + height[i - 1] + 1 height[i]=1+height[i?1]+i+height[i?1]+1 也就是说 h e i g h t [ i ] > 2 ? h e i g h t [ i ? 1 ] height[i] > 2 * height[i - 1] height[i]>2?height[i?1] 因此我们可以用递归来求解,同时记忆化一下。 定义函数 所谓记忆化就是用C++的map等方式把计算过的结果记录下来,避免重复求解。
终止条件为 a = 0 a=0 a=0,也就是计算到了0阶硬币塔。 AC代码
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 5:27:58- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |