【NC16619】传球游戏

题目

传球游戏

动态规划

思路

这道题主要考察对状态转移的理解。说实话,动态规划问题只要想到了就简单,想不到就很难,除了像背包问题那一类有固定套路的题以外,其实大部分的动态规划问题都没什么所谓的公式。还是得多练,多见识不同的题型才能更好地思考动态规划问题。

题目中给定了 n n n 个人组成一个环,要求从第 x x x 个人开始,经过 m m m 次传球之后球又回到第 x x x 个人手中的不同方法数。其中 x x x 表示球最开始在的那个人,题目中是小蛮,这可以认为是一个定值。

首先需要明确的是,假设我现在身处这个环中,要接到球有几种可能?只有两种可能,要么从右边的人手中接到球,要么从左边的人手中接到球

其实如果最开始就是往这个方向想的话,那么离正确答案也就不远了。但是我也是这么想的,却没有得到正确答案,原因是什么呢?就是那种"感觉"没有培养到位,换句话说:题练少了。

明确了这一点之后,那么显然 ,球到我手里的不同方法数,其实就是球到我左边的人手里的方法数 + + + 球到我左边的人手里的方法数。

这样一来就有递推的感觉了,也就有动态规划的影子了。

那么按照动态规划的模板思考:

设置一个 d p i j dpij dpij 数组表示经过 i i i 次传球球又回到编号为 j j j 的人手中的不同方法数。则状态转移方程为:
d p i j = d p i − 1 ( j − 1 + n ) % n + d p i − 1 ( j + 1 ) % n dpij=dpi-1(j-1+n)\\%n+dpi-1(j+1)\\%n dpij=dpi−1(j−1+n)%n+dpi−1(j+1)%n

注意是环形的,要取模。式子中的 % \% % 表示取模。

假设小蛮的编号为 0 0 0,那么最终的答案就是 d p m 0 dpm0 dpm0,即传了 m m m 次球球又回到编号为 0 0 0 的人手中。边界条件为 d p 0 1... n − 1 = 0 , d p 0 0 = 1 dp01...n-1=0,dp00=1 dp01...n−1=0,dp00=1,因为初始球就在编号为 0 0 0 的人手中,经过 0 0 0 次传球,不同的方法数为 1 1 1(球没动)

有了上面的思路就可以写出代码并解决问题了。但是不应满足于此,动态规划问题往往可以用滚动数组优化,这道题也行,具体见代码。

代码

cpp 复制代码
#include <stdio.h>

int main(void) {
    int n = 0, m = 0;
    scanf("%d%d", &n, &m);
    // 滚动数组,只保留两行,然后用奇偶性进行切换
    int dp[2][n], i = 0, j = 0, idx = 0;
    // 初始化
    for (i = 0; i < n; i++) {
        dp[0][i] = 0;
    }
    // 小蛮为0号
    dp[0][0] = 1;
    for (i = 1; i <= m; i++) {
        for (j = 0; j < n; j++) {
            idx = i & 1;  // idx仅仅是为了简化代码写法,可以去掉
            dp[idx][j] = dp[!idx][(j - 1 + n) % n] + dp[!idx][(j + 1) % n];
        }
    }
    printf("%d\n", dp[m & 1][0]);
    return 0;
}
相关推荐
旖-旎4 分钟前
LeetCode 518:零钱兑换||(完全背包)—— 题解
c++·算法·leetcode·动态规划·背包问题
To_OC33 分钟前
LC 42 接雨水:暴力超时卡半天?前后缀数组一用就通了
javascript·算法·leetcode
delishcomcn1 小时前
AI视觉识别+分切算法:电化铝缺陷检测与裁切一体化解锁
人工智能·算法
触底反弹2 小时前
深入理解大模型采样:Temperature、Top-K、Top-P 的原理与实战
人工智能·算法·面试
雪碧聊技术2 小时前
力扣 LCR 091. 粉刷房子 —— 动态规划入门详解
算法·动态规划
CV-Climber5 小时前
检索技术的实际应用
人工智能·算法
hhzz5 小时前
Tiger AI Platform平台中增加人脸识别功能
图像处理·人工智能·算法·计算机视觉·大模型
从零开始的代码生活_6 小时前
C++ 继承详解:访问控制、对象模型、菱形继承与设计取舍
开发语言·c++·后端·学习·算法
TsingtaoAI6 小时前
3D高斯泼溅技术发展及其在具身智能领域的应用综述
人工智能·算法·ai·具身智能·高斯泼溅