蓝桥杯(三)——闫氏DP

系列文章目录


一、解题步骤

1. 大问题化为小问题 :例如:dp[i]表示前i个数的某种方法的个数

2. 确定需要求的集合属性:max/min/count

3. 状态计算:一般以最后一步来划分集合

二、例题

1. 01背包问题

思路:

  1. 状态表示集(合dp[i][j]的含义):在背包承重为 [ j ]的前提下,从前 [ i ]个物品中选能够得到的最大价值

  2. 集合属性:求max

  3. 状态计算:将集合划分为有第i个背包和没有第i个背包的两种情况

代码:

python 复制代码
N,V=map(int,input().split())
v=[0]#体积
w=[0]#价值
#输入体积和价值
for i in range(N):
    a,b=map(int,input().split())
    v.append(a)
    w.append(b)
f=[[0 for i in range(V+1)]for i in range(N+1)]
for i in range(1,N+1):
    for j in range(V+1):
        f[i][j]=f[i-1][j]
        if j>=v[i]:
            f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i])
           #完全背包
           #f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i])
print(f[N][V])

2. 完全背包问题

python 复制代码
#f[i][j]:所以前i个背包,体积为j的价值
N,V=map(int,input().split())
v=[0]
w=[0]
for i in range(N):
    a,b=map(int,input().split())
    v.append(a)
    w.append(b)
f=[[0 for i in range(1010)]for j in range(N+1)]
for i in range(1,N+1):
    for j in range(0,V+1):
        f[i][j]=f[i-1][j]
        if j-v[i]>=0:
            f[i][j]=max(f[i][j],f[i][j-v[i]]+w[i]) #与01背包只有此处不同
print(f[N][V])

3. 线性DP

python 复制代码
#状态表示:dp[i] 长度 dp[i] i:所有到w[i]时的方案数
#max
#最后:if w[j]>w[i]: f[i]+=1 
n=int(input())
w=list(map(int,input().split()))
f=[[0 for i in range(n+1)]for i in range(n+1)]
result=0
for i in range(1,n+1):
    f[i]=1 #空集,只有a[i]一个
    for j in range(1,i):
        if w[j-1]<w[i-1]: 
            f[i]=max(f[i],f[j]+1)
    result=max(result,f[i])
print(result)
相关推荐
火车叼位10 分钟前
也许你不需要创建.venv, 此规范使python脚本自备依赖
python
火车叼位17 分钟前
脚本伪装:让 Python 与 Node.js 像原生 Shell 命令一样运行
运维·javascript·python
孤狼warrior28 分钟前
YOLO目标检测 一千字解析yolo最初的摸样 模型下载,数据集构建及模型训练代码
人工智能·python·深度学习·算法·yolo·目标检测·目标跟踪
Katecat9966338 分钟前
YOLO11分割算法实现甲状腺超声病灶自动检测与定位_DWR方法应用
python
玩大数据的龙威1 小时前
农经权二轮延包—各种地块示意图
python·arcgis
ZH15455891311 小时前
Flutter for OpenHarmony Python学习助手实战:数据库操作与管理的实现
python·学习·flutter
belldeep1 小时前
python:用 Flask 3 , mistune 2 和 mermaid.min.js 10.9 来实现 Markdown 中 mermaid 图表的渲染
javascript·python·flask
喵手1 小时前
Python爬虫实战:电商价格监控系统 - 从定时任务到历史趋势分析的完整实战(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·电商价格监控系统·从定时任务到历史趋势分析·采集结果sqlite存储
喵手1 小时前
Python爬虫实战:京东/淘宝搜索多页爬虫实战 - 从反爬对抗到数据入库的完整工程化方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·京东淘宝页面数据采集·反爬对抗到数据入库·采集结果csv导出
B站_计算机毕业设计之家2 小时前
猫眼电影数据可视化与智能分析平台 | Python Flask框架 Echarts 推荐算法 爬虫 大数据 毕业设计源码
python·机器学习·信息可视化·flask·毕业设计·echarts·推荐算法