首页 > 其他分享 >蓝桥杯真题(DP)

蓝桥杯真题(DP)

时间:2023-01-04 20:34:18浏览次数:53  
标签:背包 真题 int 蓝桥 分组 装饰物 readline DP lambda

装饰珠

解题思路:

根据题意,6件装备这个信息没有用,因为最终是按照所有装备中装饰物的总数来算的。

看数据范围,等级只有1、2、3、4,并且1级的可以任意放,2级的只能放2、3、4级,3级的只能放3、4级,4级的只能放4级。

所以这是一个分组背包问题。按照等级对装饰物分组。

背包问题的体积在这里就是可以放置的槽位的总数。

f[i][j]表示放了i种装饰物,总共放了j个装饰物的最大总价值。

这里与背包问题不一样,第二维不表示“体积不超过j”,而表示“体积为j”,因为递推需要保证填满j,不然无法递推。

若放t个第i种装饰物的价值为w[t],则 f[i][j] 可以由 max(f[i - 1][j - t] + w[t]) 推得。

因为这是一个分组背包问题,所以降维方法也一样。

考虑到等级的限制,需要从较高等级的装饰物开始枚举。

import sys; readline = sys.stdin.readline
read = lambda: [int(x) for x in readline().split()]
alloc = lambda *s: len(s) != 1 and [alloc(*s[1:]) for i in range(int(s[0]) + 2)] or [0] * int(s[0] + 2)
bet = lambda a, b : a <= b and range(a, b + 1) or range(a, b - 1, -1)

count = [0] * 5
for i in range(6): 
  for t in read()[1:]:
    count[t] += 1

m = sum(count)

n, = read()
w = [[] for _ in range(5)]
for i in bet(1, n):
    a, b, *c = read()
    w[a].append(c)

f = alloc(m) 
# f[i][j] 表示按照从高等级开始放入珠子,放了i个,并且总共放了j个装饰物的最大价值。
# 这里按照背包问题的降维方法,去掉了i对应的那一维

able = 0
for level in bet(4, 1):
    able += count[level] # j可以达到的最大值
    for vec in w[level]:
        for j in bet(able, 0): # 为了降维,j从大开始枚举
            for i, v in enumerate(vec):
                if j - i - 1 < 0: break
                # 这里不能用f[j]=max(f[j],f[j-i-1]+v),否则可能会超时
                if f[j] < f[j - i - 1] + v:
                    f[j] = f[j - i - 1] + v

print(max(f[:]))

标签:背包,真题,int,蓝桥,分组,装饰物,readline,DP,lambda
From: https://www.cnblogs.com/iku-iku-iku/p/17025935.html

相关文章

  • 数位DP
    数位DP综述数位DP的应用范围:在某个区间内有多少个满足一定的性质数位DP中使用的方法:类似于前缀和。A到B相当于f[B]-a[A-1]这一点尤为重要,因为已经弱化了边界,......
  • 【科研神器】文献综述助手ConnectedPapers
    先上网站地址:https://www.connectedpapers.com/​www.connectedpapers.com/主要功能:自动计算论文的相似度和相关性网图呈现论文关系论文重点信息的视觉呈现梳理领......
  • 蓝桥真题——卡片
    题目卡片标签:填空题2021省赛代码#方法1importosimportsys#请在此输入您的代码num=''i=1whilenum.count('1')<2021:num=''.join((num,str(i)))......
  • SDP学习笔记
    一、SDP规范了回话描述的格式,一般结合会话协议共同工作。常见的会话传送协议包括:SAP(SessionAnnouncementProtocol会话公告协议),SIP,RTSP,HTTP,和使用MIME的E-Mail。......
  • 蓝桥真题——最短路 & 门牌制作
    题目1最短路标签:填空题2019省赛如下图所示,G是一个无向图,其中蓝色边的长度是1、橘色边的长度是2、绿色边的长度是3。则从A到S的最短距离是多少?答案由图可......
  • 蓝桥杯——巧妙地递归
    一、切蛋糕思想对于递归,我们可以采用思想之一,切蛋糕思想。简而言之,就是将一个大问题,切成若干个小问题进行解决。递归三要素:找重复、找变化、找边界我们可以理解为,自己......
  • 跑步锻炼 —— 蓝桥( Calendar类 详解)
    Calender使用:使用Calendar.getInstance()不仅能获取当前的时间,还能指定需要获取的时间点,在项目应用中达到定时的作用。Calender类在java.util包中。使用Calende......
  • 1.2 SMU Winter 2023 蓝桥杯模拟赛 1
    [蓝桥杯2013省B]带分数题意:给n,使满足式子a+b/c=n,其中a,b,c共同恰好由1,2...9组成,求a,b,c的取值种数思路1:枚举出9个数的全排列(可使用next_permutation()),再用两重循环暴......
  • 寒假第一次洛谷蓝桥个人赛 题解+补题(下)
    D.灵能传输##神仙结论把前缀和应用到极致,6先考虑三个数a,b,c,进行一次变换也就是a+b,-b,c+b可见三个数之和不变,也就是s[3]不变然后之前的s[1]+b,愿称之为s[2]之前的s......
  • 最最最简单使用Docker部署Wordpress
    普通Docker部署这种方式我用过,但是总体来说是比较麻烦的。但是可以简单说一下流程,总体流程如下:安装Docker环境拉取Wordpress镜像,运行镜像拉取MySql镜像,运行镜像Wordp......