第13届景驰-埃森哲杯广东工业大学ACM程序设计大赛 A 跳台阶【DP】

链接:https://www.nowcoder.com/acm/contest/90/A
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
小明在坐景驰科技研发的无人车到达了目的地。
景驰科技(JingChi.ai)是一家由人工智能技术驱动、以无人驾驶技术为核心的智能出行公司。它将打造面向中国市场的全无人驾驶。
从无人车下来以后,小明看到了一个长长的楼梯。
有一个n级台阶的楼梯,小明一次可以向上跳1步,两步,甚至是n步,请问小明跳到n级台阶有多少种跳法?
输入描述:

第一行输入一个整数t,代表有t组样例:( T<=30)
接下来的t行,都用一个整数n,表示楼梯有n级台阶( 1<=n<=30)

输出描述:

输出跳到第n级台阶有多少种跳法

示例1
输入

1
1

输出

1

思路
其实就是 爬楼梯问题的升级版
我们来分析一下 爬楼梯问题
爬楼梯 问题 是 一次 可以跳一格,两格,或者三格
那么跳一格的情况 就是 dp[n - 1] 的所有情况
然后跳二格的情况 就是 dp[n - 2] 的所有情况
最后 跳三格的情况就是 dp[n - 3] 的所有情况

递推公式
dp[n] = dp[n - 1] + dp[n - 2] + … + dp[1]

AC代码

#include <cstdio>
#include <cstring>
#include <ctype.h>
#include <cstdlib>
#include <cmath>
#include <climits>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <deque>
#include <vector>
#include <queue>
#include <string>
#include <map>
#include <stack>
#include <set>
#include <numeric>
#include <sstream>
#include <iomanip>
#include <limits>

#define CLR(a) memset(a, 0, sizeof(a))

using namespace std;
typedef long long ll;
typedef long double ld;
typedef unsigned long long ull;
typedef pair <int, int> pii;
typedef pair <ll, ll> pll;
typedef pair<string, int> psi;
typedef pair<string, string> pss;

const double PI = 3.14159265358979323846264338327;
const double E = exp(1);
const double eps = 1e-3;

const int INF = 0x3f3f3f3f;
const int maxn = 1e4 + 5;
const int MOD = 1e9 + 7;

ll ans[31] = { 0 };

int main()
{
    for (int i = 1; i < 31; i++)
    {
        ans[i] = 1;
        for (int j = 0; j < i; j++)
            ans[i] += ans[j];
    }
    int t;
    cin >> t;
    while (t--)
    {
        int n;
        cin >> n;
        cout << ans[n] << endl;
    }
}
实现 STM32 微控制器与陶景驰串口屏通信通常涉及以下几个关键步骤: ### 1. 硬件连接 - **接口选择**:STM32 微控制器通常通过 UART(通用异步收发器)接口与串口屏进行通信。确保使用正确的引脚配置,例如 USART1、USART2 或其他可用的 UART 模块。 - **电平匹配**:确认 STM32 和串口屏之间的电压电平是否一致(如 3.3V 或 5V)。如果不一致,可能需要使用电平转换器以避免损坏设备。 - **物理连接**: - TXD (Transmit Data) 引脚从 STM32 连接到串口屏的 RXD (Receive Data) 引脚。 - RXD 引脚从 STM32 连接到串口屏的 TXD 引脚。 - GND(地线)必须共用以确保信号完整性。 ### 2. 配置串口参数 - **波特率设置**:确定串口屏支持的波特率(如 9600, 115200),并在 STM32 的 UART 初始化代码中进行相应配置。 - **数据格式**:设定数据位(通常为 8 位)、停止位(通常为 1 位)和校验位(无校验或偶校验等)。 示例代码(基于 STM32 HAL 库): ```c UART_HandleTypeDef huart1; void MX_USART1_UART_Init(void) { huart1.Instance = USART1; huart1.Init.BaudRate = 115200; // 设置合适的波特率 huart1.Init.WordLength = UART_WORDLENGTH_8B; huart1.Init.StopBits = UART_STOPBITS_1; huart1.Init.Parity = UART_PARITY_NONE; huart1.Init.Mode = UART_MODE_TX_RX; huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE; huart1.Init.OverSampling = UART_OVERSAMPLING_16; if (HAL_UART_Init(&huart1) != HAL_OK) { Error_Handler(); } } ``` ### 3. 发送和接收数据 - **发送命令**:根据串口屏的协议规范,构造并发送相应的指令。例如,控制屏幕显示文本、切换画面等操作。 - **接收反馈**:如果串口屏支持返回状态信息或响应,则需编写中断服务程序或轮询机制来处理接收到的数据。 示例发送命令代码: ```c char command[] = "CMD_CLEAR_SCREEN"; // 示例命令 HAL_UART_Transmit(&huart1, (uint8_t*)command, strlen(command), HAL_MAX_DELAY); ``` ### 4. 软件开发工具链 - **IDE 和编译器**:使用 STM32CubeIDE 或 Keil MDK-ARM 开发环境,结合 STM32 HAL 库简化硬件抽象层的操作。 - **调试工具**:利用 ST-Link V2 或 J-Link 调试器进行在线调试,确保串口通信功能正常工作。 ### 5. 协议解析 - **文档查阅**:参考陶景驰串口屏提供的官方文档,了解其特有的通信协议及命令集。这些文档通常会详细说明如何构建请求帧以及预期的响应格式。 - **错误处理**:设计适当的错误检测逻辑,比如超时重传机制或 CRC 校验,以提高系统的稳定性和可靠性。 ### 6. 测试与优化 - **基本测试**:首先验证简单的字符传输是否成功,然后逐步增加复杂度,测试图形绘制、触摸事件等功能。 - **性能调优**:分析实际运行中的延迟问题,并调整缓冲区大小、DMA 使用等方式提升效率。 通过以上步骤,可以有效地在 STM32 平台上实现与陶景驰串口屏的高效可靠通信。需要注意的是,在具体实施过程中应密切关注各组件的技术规格书,并严格按照厂商推荐的最佳实践执行操作[^1]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值