| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 数据结构与算法 -> 算法练习题27---蓝桥杯2020省赛“装饰珠” -> 正文阅读 |
|
[数据结构与算法]算法练习题27---蓝桥杯2020省赛“装饰珠” |
前言蓝桥杯2020省赛,编程题(C++) 一、题目描述在怪物猎人这一款游戏中,玩家可以通过给装备镶嵌不同的装饰珠来获取 相应的技能,以提升自己的战斗能力。 已知猎人身上一共有 6 件装备,每件装备可能有若干个装饰孔,每个装饰孔有各自的等级,可以镶嵌一颗小于等于自身等级的装饰珠 (也可以选择不镶嵌)。 装饰珠有 M 种,编号 1 至 M,分别对应 M 种技能,第 i 种装饰珠的等级为 iLi,只能镶嵌在等级大于等于Li 的装饰孔中。 对第 i 种技能来说,当装备相应技能的装饰珠数量达到 Ki 个时,会产生 Wi(Ki) 的价值。镶嵌同类技能的数量越多,产生的价值越大,即 Wi(Ki?1)<Wi(Ki)。但每个技能都有上限 Pi(1≤Pi≤7),当装备的珠子数量超过 Pi 时,只会产生Wi(Pi) 的价值。 对于给定的装备和装饰珠数据,求解如何镶嵌装饰珠,使得 6 件装备能得到的总价值达到最大。 输入描述输入的第 1 至 6 行,包含 6 件装备的描述。其中第 i 行的第一个整数 Ni 表示第 i 件装备的装饰孔数量。后面紧接着 Ni 个整数,分别表示该装备上每个装饰孔的等级 L (1≤L≤4)。 第 7 行包含一个正整数 M,表示装饰珠 (技能) 种类数量。 第 8 至 M + 7 行,每行描述一种装饰珠 (技能) 的情况。每行的前两个整数 Lj (1≤Lj≤4) 和 Pj (1≤Pi≤7) 分别表示第 j种装饰珠的等级和上限。接下来 Pj 个整数,其中第 k 个数表示该装备中装饰珠数量为 k 时的价值 Wj(k)。 其中,1≤Ni≤50,1≤M≤104,1≤Wj(k)≤104。 输出描述输出一行包含一个整数,表示能够得到的最大价值。 输入输出样例示例
按照如下方式镶嵌珠子得到最大价值 20,括号内表示镶嵌的装饰珠的种类编号:
4 颗技能 1 装饰珠,4 颗技能 2 装饰珠 W1(4)+W2(4)=5+15=20。 运行限制
二、思路解析毋庸置疑这是一道非常难的动态规划问题,但仔细去分析可以发现这是一道基于0/1背包问题的动态规划题目。 首先我们要有一个动态规划的思路,我进行了以下数理:
数据结构上: int dp[a][b] 表示在前a种珠子(包括a)的情况下,装饰孔数量为b时所能产生的最大价值 选取最大值时,比较的是在前a-1种珠子下,与当前加入了a种珠子时对于最大价值的影响,这里还需要一层循环用来控制第a种珠子个数对价值的影响 核心程序:
另一组测试样例: 输入:
输出:
三、AC代码
参考大佬博客:蓝桥杯真题——装饰珠_Hey XIN的博客-CSDN博客_蓝桥杯装饰珠 感谢阅读!也欢迎大家关注小白博主,多多鼓励一下! |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 18:36:06- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |