蓝桥杯(三)——闫氏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)
相关推荐
lifewange17 小时前
pytest-类中测试方法、多文件批量执行
开发语言·python·pytest
pluvium2717 小时前
记对 xonsh shell 的使用, 脚本编写, 迁移及调优
linux·python·shell·xonsh
2401_8274999918 小时前
python项目实战09-AI智能伴侣(ai_partner_5-6)
开发语言·python
PD我是你的真爱粉18 小时前
MCP 协议详解:从架构、工作流到 Python 技术栈落地
开发语言·python·架构
ZhengEnCi18 小时前
P2G-Python字符串方法完全指南-split、join、strip、replace的Python编程利器
python
是小蟹呀^18 小时前
【总结】LangChain中工具的使用
python·langchain·agent·tool
宝贝儿好18 小时前
【LLM】第二章:文本表示:词袋模型、小案例:基于文本的推荐系统(酒店推荐)
人工智能·python·深度学习·神经网络·自然语言处理·机器人·语音识别
王夏奇18 小时前
pythonUI界面弹窗设置的几种办法
python·ui
ZhengEnCi19 小时前
P2B-Python可迭代对象完全指南-从列表到生成器的Python编程利器
python
萌萌站起19 小时前
Vscode 中 python模块的导入问题
ide·vscode·python