当前位置: 首页 > news >正文

蓝桥杯备赛:动态规划入门

写题的时候我发现:除了输入输出、循环、条件等基本语句一类的题目之外,我就什么都不会了,题目根本写不下去。

需要学:动态规划、哈希表、二分法、贪心算法等基本算法

现在什么都不会,对这些东西也是一点都不会懂,还有点怕,

“我想都不知道怎么想的东西,怎么用代码敲出来?”

但是呀,我想跟自己说:你学一个东西之前,是肯定不会的呀,不然为什么要学呢?

学会了其实也就那样。SO,学就好了~

对动态规划的初步理解:

登台阶问题:

共n个台阶,每次最多跨k步,有几种方式登完?

标红原因:列表空间开小了刚开始我写的是

dp = [0] * 100

那么什么是动态规划呢?目前我觉得是找到最终目的地的次目的地,再通过次目的地找到次次目的地,一次次递归,计算次数.

就像计算dp[5]的时候,我们用的是dp[3] + dp[4]

而计算dp[4]的时候,我们用的是dp[2] + dp[3]

然后这样一步步往前推。

——在找最后的解的时候,往前一步找到这个解前面的一步

#动态列表入门1 跨阶梯问题

dp = [0] * 1000000            #开列表

'''dp 是一个变量名,通常用来表示动态规划的状态数组。
[0] 表示一个包含单个元素 0 的列表。
* 1000000 表示将这个列表重复扩展到长度为 1000000,
即创建一个包含 1000000 个元素的列表,每个元素的值都是 0。
这行代码的作用是创建一个长度为 1000000 的列表,所有元素的初始值均为 0'''

n,k = map(int,input().split()) #一行输入两个变量,用空格隔开
dp[0] = 1

for i in range(1, n + 1):      #求走到最后的阶梯上共有几种
    for j in range(1, k + 1):  #求走到它次级阶梯怎么走
        if i - j >= 0:
            dp[i] = (dp[i] + dp[i - j]) % 10003

print(dp[n])

好吧,这段代码,就算我知道了它的原理,好像还是不能这样用循环写出来,每次问题稍稍复杂一点我就蒙了,刚刚又看了一遍,好像有些头绪了

十进制数翻转问题

动态规划进一步理解:长的依赖短的,复杂的问题,分解成简单的子问题。

我觉得我可以!!!我一定可以!!!

别人的代码:

s = input()  # 原始字符串
ans = 0      # 最终合规翻转字符串次数的累加
n = len(s)
dp = [[0] * n for _ in range(n)]  # 初始化动态规划数组

# 遍历所有可能的子序列长度 r
for r in range(2, n + 1):  # length of subsequence
    for i in range(0, n - r + 1):  # 遍历所有可能的起始位置 i
        j = i + r - 1  # 计算对应的结束位置 j

        if r == 2:  # 当子序列长度为 2 时
            if s[i] > s[j]:
                dp[i][j] = 1  # 如果 s[i] > s[j],则 dp[i][j] = 1
            else:
                dp[i][j] = 0  # 否则 dp[i][j] = 0
        elif r > 2:  # 当子序列长度大于 2 时
            if s[i] > s[j]:
                dp[i][j] = dp[i + 1][j] + dp[i][j - 1] - dp[i + 1][j - 1]  # 需要减去重复计算的部分
            else:
                dp[i][j] = dp[i + 1][j - 1]  # 如果 s[i] <= s[j],则继承内部子序列的结果

        ans += dp[i][j]  # 累加所有满足条件的子序列

print(ans

我不会啊,她视频的第二个代码题我听得时候都不专注

相关文章:

  • 架构设计基础系列:面向对象设计的原则
  • 【Spring Boot 与 Spring Cloud 深度 Mape 之三】服务注册与发现:Nacos 核心实战与原理浅析
  • 【Easylive】服务端操作 Cookie 的完整流程(结合案例解析)
  • APIPost接口测试完整流程指南
  • java学习笔记11——泛型
  • 【Unity】 HTFramework框架(六十四)SaveDataRuntime运行时保存组件参数、预制体
  • Python WebSockets 库详解:从基础到实战
  • MySQL 5.7 Online DDL 技术深度解析
  • C++和C#接口对应关系
  • 【运维】Centos硬盘满导致开机时处于加载状态无法开机解决办法
  • Docker基础详解
  • Linux 高级路由策略控制配置:两个不同路由子网间通信
  • 沉浸式体验测评|AI Ville:我在Web3小镇“生活”了一周
  • 基于MODIS观测的全球格点数据处理与GeoTIFF栅格化存储
  • 新闻发布管理系统带万字文档新闻管理系统java项目java课程设计java毕业设计
  • ES5内容之String接口
  • python-leetcode 62.搜索插入位置
  • 阻止上传可执行程序
  • 实现Excel导入和导出
  • 服务器自动备份到本地,服务器自动备份到本地的方法有哪些?
  • 雷军:过去一个多月是创办小米以来最艰难的时间
  • 重庆荣昌出圈背后:把网络流量变成经济发展的增量
  • 稳住外贸基本盘,这个中部大省出手了
  • 如此城市|上海老邬:《爱情神话》就是我生活的一部分
  • 上海“随申兑”服务平台有哪些功能?已归集800余个惠企政策
  • 加力、攻坚、借力、问效,上海为优化营商环境推出增量举措