首页 > 其他分享 >【蓝桥杯】(台阶方案dp)

【蓝桥杯】(台阶方案dp)

时间:2024-03-12 18:59:38浏览次数:31  
标签:台阶 对于 int LL 所以 蓝桥 步长 dp

#include <iostream>
using namespace std;
#define LL long long
const int N=1e6+5;
const LL p=1e9+7;
LL dp[N];
int a[3];//
int main()
{
    LL n;
    cin>>n;
    cin>>a[0]>>a[1]>>a[2];
     dp[0]=1;//当目标值为 0 时,只有一种方案
     for (int i=1;i<=n;++i)
    {
        for (int j=0;j<3;j++)
        {
            if (i-a[j]>=0) 
            dp[i]=(dp[i]+dp[i-a[j]])%p;
        }
    }
      cout<<dp[n];

  return 0;
}

n = 5
a[0] = 1 a[1] = 2 a[2] = 3

首先,初始化 dp[0] = 1。从 1 开始循环到 5,对于每个位置 i,根据步长数组 a 来更新 dp[i] 的值。

i = 1 时:

  • 对于 j = 0i - a[j] = 1 - 1 = 0,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[0] = 1 + 1 = 2

i = 2 时:

  • 对于 j = 0i - a[j] = 2 - 1 = 1,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[1] = 0 + 2 = 2
  • 对于 j = 1i - a[j] = 2 - 2 = 0,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[0] = 2 + 1 = 3

i = 3 时:

  • 对于 j = 0i - a[j] = 3 - 1 = 2,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[2] = 0 + 2 = 2
  • 对于 j = 1i - a[j] = 3 - 2 = 1,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[1] = 2 + 2 = 4
  • 对于 j = 2i - a[j] = 3 - 3 = 0,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[0] = 4 + 1 = 5

i = 4 时:

  • 对于 j = 0i - a[j] = 4 - 1 = 3,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[3] = 0 + 5 = 5
  • 对于 j = 1i - a[j] = 4 - 2 = 2,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[2] = 5 + 2 = 7
  • 对于 j = 2i - a[j] = 4 - 3 = 1,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[1] = 7 + 2 = 9

i = 5 时:

  • 对于 j = 0i - a[j] = 5 - 1 = 4,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[4] = 0 + 9 = 9
  • 对于 j = 1i - a[j] = 5 - 2 = 3,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[3] = 9 + 5 = 14
  • 对于 j = 2i - a[j] = 5 - 3 = 2,所以 dp[i] = dp[i] + dp[i - a[j]] = dp[i] + dp[2] = 14 + 2 = 16

通过动态规划的思想将步长和方案数进行了关联。对于每一个位置 i,通过遍历步长数组 a 中的每一个值,来计算当前位置 i 的方案数 dp[i]。

假设当前要计算的位置是 i,那么遍历步长数组 a 中的每一个步长 a[j],如果 i - a[j] >= 0,说明当前位置可以由之前的某个位置经过步长 a[j]到达,此时就累加上到达该位置的方案数 dp[i-a[j]] 到当前的方案数 dp[i] 中。这样就能够实现将步长和方案数进行关联,动态地计算出每个位置的方案数。

当 n 的值为 0 时,for (int i=1; i<=n; ++i) 不会执行任何循环,而 for (int i=1; i<n; i++) 会执行一次循环。取决于具体需求,选择适当的循环条件。

标签:台阶,对于,int,LL,所以,蓝桥,步长,dp
From: https://blog.csdn.net/2301_76518242/article/details/136659953

相关文章

  • 蓝桥杯2019年第十届省赛真题-修改数组
    查重类题目,想到用标记数组记录是否出现过但是最坏情况下可能会从头找到小尾巴,时间复杂度O(n2),数据范围106显然超时再细看下题目,我们重复进行了寻找是否出现过,干脆把每个元素出现过的次数k记录下来,直接跳到后k个位置,实现O(n)#include<stdio.h>#include<string.h>#inclu......
  • 蓝桥杯2023年第十四届省赛真题-工作时长
    文件数据把数据复制到excel中数据按照增序排序选中列数据,设置单元格格式,选择下述格式。注意,因为求和之后总小时数可能会超过24小时,所以不要选择最前面是hh的设置B2=A2-A1,B4=A4-A3;然后选中已经算出来的这四格,下拉,就能自动算出来了对算出来的数据进行......
  • 区间 DP
    P3146[USACO16OPEN]248G给定一个序列,每次可以将两个相邻且相同的数合并成一个数,合并结果为原数加一。求最后能得到的最大数字。\(n\le248\),\(1\lea_i\le40\)。最暴力的,设状态\(f_{l,r,k}\)表示区间\([l,r]\)能否最终合并为数字\(k\)。也就是说\(f_{l......
  • 三、jsPlumb实现流程图配置--Endpoint详细参数
    一、前言基于上一篇文章中已经搭建好的jsPlumb项目,在此篇文章中演示Endpoint的一些参数以及参数的效果。二、Endpoint创建在一个节点上创建Endpoint有三种方式://方式一:直接使用字符串指定类型。注意:大小写敏感//圆点形constendpoint1=jsPlumb.value.addEndpoint......
  • P8612 [蓝桥杯 2014 省 AB] 地宫取宝
    https://www.luogu.com.cn/problem/P8612#submit原始暴搜代码,没有记忆化,会tle#include<iostream>#include<vector>#include<algorithm>#include<math.h>#include<sstream>#include<string>#include<string.h>#include<iomanip&g......
  • Logstash接收udp/tcp数据 python+ udp/tcp +logstash +elasticsearch
    Logstash接收udp/tcp数据背景:在 Logstash数据源为日志文件操作 基础上进行一、配置文件1.D:\usr\local\etc\logstash\pipeline1目录下logstash.conf文件配置input{stdin{}udp{host=>"0.0.0.0"#从5000端口获取日志port=>5000......
  • 第十二届蓝桥杯编程题
    目录试题F:时间显示题解试题G:杨辉三角形法一、暴力法二、公式法三、结合上者试题H:左孩子右兄弟题解:树型dp试题I:异或数列法一、博弈论试题J:括号序列法一、动态规划试题F:时间显示1秒=1000毫秒1分=60秒=100060=60000毫秒1小时=60分=6000060=3600000毫秒1天=24小时=360000024=8......
  • 【蓝桥-大试牛刀7-最短路专场】题解
    最短路1floyd说白了就是个暴力,用三层循环枚举所有路径,然后留下权值最小的一条大概就长这个样for(中转点k) for(起点i) for(终点j) d[i][j]=min(d[i][j],d[i][k]+d[k][j]);注意这个题的数据有重边,输入的时候留下最小的,这样就做完了intd[N][N];voidsolve(){......
  • 蓝桥杯算法集训 - Week1:二分、前缀和、差分算法
    蓝桥杯算法集训-Week1本系列随笔用于整理AcWing题单——《蓝桥杯集训·每日一题2024》的系列题型及其对应的算法模板。一、二分查找二分算法原理复习参考:二分查找-Hello算法Ⅰ、二分模板boolcheck(intx){/*...*/}//检查x是否满足某种性质//区间[l,r]被划分......
  • 【动态规划】线性dp /训练记录/
    开篇碎碎念前些日子写期望dp,但是...cf的那个C可以dp但是没有开出来,于是决定重新开始练dp√(一定是因为题目做的不够多捏,加训!)是根据这个题单来练哒,指路:【动态规划】普及~省选的dp题然后边练边整理一下思路什么的)))基本思路其实动态规划的本质就是暴力(这也是可以说的吗(遁),考虑好......