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

蓝桥杯备赛——DP续【python】

一、小明的背包2

试题链接:https://www.lanqiao.cn/problems/1175/learning/

输入示例

5 20
1 6
2 5
3 8
5 15
3 3 

输出示例

120

问题分析

这题是完全背包,每个物品有无数个,所以对于任意dp[i][j](其表示的意思为选到第i个物品时所消耗的体积为j),当j>=i的体积时,其可以从三个状态转移过来,①dp[i-1][j](表示一次也不选i)②dp[i-1][j-w]+v   (表示第一次选i)③dp[i][j-w]+v(表示不一定第一次选i),把②去掉答案也是对的;当j<i时,只能从dp[i-1][j]转移来啦。


代码示例

N,V=map(int,input().split())
dp=[[0]*(V+1) for _ in range(N+1)]
for i in range(1,N+1):w,v=map(int,input().split())for j in range(1,V+1):if j-w>=0:dp[i][j]=max(dp[i-1][j],dp[i-1][j-w]+v,dp[i][j-w]+v)else:dp[i][j]=dp[i-1][j]
print(dp[N][V])

二、最长公共子序列

试题链接:https://www.lanqiao.cn/problems/1189/learning/

输入示例

5 6
1 2 3 4 5
2 3 2 1 4 5

输出示例

4

问题分析

dp[i][j]表示数组A处理到第i个数,数组B处理到第j个数时他们的最大公共子序列的长度。分为两种情况:①a[i]==b[j],那么dp[i][j]=dp[i-1][j-1]+1;②a[i]!=b[j],dp[i][j]=max(dp[i-1][j],dp[i][j-1])


代码示例

N,M=map(int,input().split())
a=[0]+input().split()
b=[0]+input().split()
dp=[[0]*(M+1) for _ in range(N+1)]
for i in range(1,N+1):for j in range(1,M+1):if a[i]==b[j]:dp[i][j]=dp[i-1][j-1]+1else:dp[i][j]=max(dp[i-1][j],dp[i][j-1])
print(dp[N][M])

http://www.lryc.cn/news/356407.html

相关文章:

  • 区块链系统开发测试----链码部署开发、系统开发验证
  • ResNet 学习
  • 前端React老项目打包caniuse-lite报错解决思路
  • 【全开源】优校管理系统支持微信小程序+微信公众号+H5
  • Python条件分支与循环
  • AI手语研究数据集;视频转视频翻译和风格化功能如黏土动画;AI检测猫咪行为;开放源码的AI驱动搜索引擎Perplexica
  • 四川景源畅信:新人做抖店的成本很高吗?
  • ChatGPT原创指令大全(持续更新)
  • Java实现对PDF、纵向、横向页面添加自定义水印功能
  • 设计模式15——享元模式
  • 多模态中的模态有哪些
  • Java练习题(八)
  • Linux文本文件管理003
  • uniapp Androud 离线打包升级APK,覆盖安装不更新问题
  • 【算法实战】每日一题:设计一个算法,用最少数量的矩形覆盖一系列宽度为d、高度为w的矩形,且使用矩形不能超出边界
  • 外贸仓库管理软件:海外仓效率大幅度提升、避免劳动力积压
  • 6.8 LIBBPF API(七,bpf_core_read.h 函数,定义,枚举)
  • 电脑卸载linux安装windows后每次开机都出现grub
  • 总结 HTTPS 的加密流程
  • Spring的FactoryBean多例问题
  • [nextjs]推荐几个很好看的模板网站
  • 《当微服务遇上Ribbon:一场负载均衡的华丽舞会》
  • 简单随机数据算法
  • js画思维导图代码2
  • 使用 Flask 实现异步请求处理
  • 关于c++的通过cin.get()维持黑框的思考
  • fastadmin接口输出图片 自动拼接网站URL
  • VMware Workstation 不可恢复错误:(vmui) 错误代码0xc0000094
  • DockerNetwork
  • QT学习(20):QStyle类