蓝桥杯(三)——闫氏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)
相关推荐
别或许8 分钟前
python中的异步调用(直接使用教程)
java·前端·python
百***243710 分钟前
DeepSeek-V3.2全解析:开源大模型的性能巅峰与落地实践指南
python·开源
方安乐20 分钟前
杂记:Quart和Flask比较
后端·python·flask
嫂子开门我是_我哥25 分钟前
第十六节:异常处理:让程序在报错中稳定运行
开发语言·python
测试199826 分钟前
如何使用Appium实现移动端UI自动化测试?
自动化测试·软件测试·python·测试工具·ui·appium·测试用例
yuankoudaodaokou27 分钟前
无图纸如何定制汽车外饰件?3DeVOK MT+ QUICKSURFACE逆向设计解决方案
python·3d·汽车·机器翻译
郝学胜-神的一滴1 小时前
Python中的with语句与try语句:资源管理的两种哲学
linux·服务器·开发语言·python·程序人生·算法
难得的我们1 小时前
如何为开源Python项目做贡献?
jvm·数据库·python
和小胖11221 小时前
Anaconda虚拟环境创建步骤
python·conda·numpy
一晌小贪欢1 小时前
Python 魔术方法实战:深度解析 Queue 模块的模块化设计与实现
开发语言·分布式·爬虫·python·python爬虫·爬虫分布式