【每日一题】备战冲击蓝桥杯国赛——Python程序设计 | Day06 | 装饰珠 | 真题代码解析

举报
府学路18号车神 发表于 2022/03/03 23:06:20 2022/03/03
【摘要】 每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!一起来刷题,冲击国赛!!! 2020年第十一届蓝桥杯赛题总览2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题! 蛇形填数(题目)(本题总分:25分)官方练习系统:https://www.lanqiao.cn/problems/507/learning/—>【问...

每天刷一道题,话不多说,先刷近两年的题吧,从2020的开始,如果有一起的可以加入我们!!!

一起来刷题,冲击国赛!!!


2020年第十一届蓝桥杯赛题总览

2020年的题就是这些,类型分为两种,分别是结果填空和程序设计,我们每天刷一道题,省赛没问题!
在这里插入图片描述

蛇形填数(题目)

(本题总分:25分)

官方练习系统:https://www.lanqiao.cn/problems/507/learning/


—>【问题描述】


<div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; </center>

—>【输入描述】


<div style="color:orange; border-bottom: 1px solid #d9d9d9; display: inline-block; color: #999; </center>

—>【输出描述】

输出一行包含一个整数,表示能够得到的最大价值。

—>【输入输出样例】

输入:
1 1
2 1 2
1 1
2 2 2
1 1
1 3
3
1 5 1 2 3 5 8
2 4 2 4 8 15
3 2 5 10

输出:
20

—>【样例说明】

按照如下方式镶嵌珠子得到最大价值 18,括号内表示镶嵌的装饰珠的种类编号:

1: (1)
2: (1) (2)
3: (1)
4: (2) (2)
5: (1)
6: (2)

4 颗技能 1 装饰珠,4 颗技能 2 装饰珠 W 1 ( 4 ) + W 2 ( 4 ) = 5 + 15 = 20 W_1(4) + W_2(4) = 5 + 15 = 20


解析


通过阅读题干,本题——难度中上:⭐⭐⭐⭐

考察类型:数论

考察知识点:动态规划+枚举


分析:

由于是填空题,我们只需要得出一个结果即可。结果为一个整数。

这道题就很有意思了,对于爱玩游戏的工科男,计算这种buff类的题,要是做不出来就有点丢人了(开玩笑,题目还是有一定的难度哈!~)首先得先看懂题干,其实需要理解!

先看一下输入样例:
在这里插入图片描述


代码

Python代码实现:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2022/2/27 15:04
# @Author  : 府学路18号车神
# @Email   :yurz_control@163.com
# @File    : Day06.py

listlv=[0]*5
listw=[[0 for i in range(8)]for i in range(5)]
listl=[0]*5
listp=[0]*5

#先用列表listlv存储各个等级的装饰孔的数量(例如,listlv[1]=3表示等级为1的装饰孔共3个)
for i in range(6):
    listinput=list(map(int,input().split()))
    for i in range(1,len(listinput)):
        listlv[listinput[i]]+=1

summ=0

m=int(input())
for i in range(m):
    listt=list(map(int,input().split()))
    listl[listt[0]]=listt[0]
    listp[listt[0]]=listt[1]
    listw[listt[0]]=[0]+listt[2:]

#按等级从大到小,对于每种等级的装饰珠进行枚举
for i in range(min(listlv[4],listp[4])+1):
    for j in range(min(listlv[4]+listlv[3]-i,listp[3])+1):
        for k in range(min(listlv[4]+listlv[3]+listlv[2]-j-i,listp[2])+1):
            for l in range(min(listlv[4]+listlv[3]+listlv[2]+listlv[1]-j-i-k,listp[1])+1):
                summ=max(summ,listw[4][i]+listw[3][j]+listw[2][k]+listw[1][l])

print(summ)		# 175

今天的题在系统里面验证的,如果再PyCharm没法验证!~

在这里插入图片描述

由此,我们可以快速的出结果为:175

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。