P1544 三倍经验 (记忆化搜索)
三倍经验
题目描述
数字金字塔由 n n n 行整数组成,第 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1≤i≤n) 行有 i i i 个数字,一个示例如下。
73 98 1 02 7 4 4
4 5 2 6 5
现在你在金字塔的顶部(第一行),你希望走到金字塔的底部(第 n n n 行),每一步你只能走向当前所在位置的左下方的数字或者右下方的数字。同时作为一个强大的小朋友,你可以选择金字塔中的不多于 k k k 个数字让他们成为原来的 3 3 3 倍。
你会收集你路上经过的所有位置上的数字,最后的得分即为收集的数字之和,求最大得分。
输入格式
第一行输入两个整数 n , k n,k n,k,表示数字金字塔的行数和乘 3 3 3 的数字个数最大值;
接下来 n n n 行,其中的第 i i i 行有 i i i 个以空格隔开的整数依次表示数字金字塔第 i i i 行的数字 a i , 1 , a i , 2 , a i , 3 . . . a i , i a_{i,1},a_{i,2},a_{i,3}...a_{i,i} ai,1,ai,2,ai,3...ai,i。
输出格式
一行一个整数,表示最大得分。
样例 #1
样例输入 #1
5 3
7
3 9
8 1 0
2 7 4 4
4 5 2 6 5
样例输出 #1
75
提示
对于 30 % 30\% 30% 的数据,满足 k ≤ n ≤ 6 k\le n\le 6 k≤n≤6,并且对于任意 1 ≤ i ≤ n 1\le i\le n 1≤i≤n, 1 ≤ j ≤ i 1\le j\le i 1≤j≤i 满足 0 ≤ a i , j ≤ 100 0\le a_{i,j}\le 100 0≤ai,j≤100;
对于 100 % 100\% 100% 的数据,满足 1 ≤ n ≤ 100 1\le n\le100 1≤n≤100, 0 ≤ k ≤ n ( n + 1 ) 2 0\le k\le \dfrac{n(n+1)}{2} 0≤k≤2n(n+1),且对于任意 1 ≤ i ≤ n 1\le i\le n 1≤i≤n, 1 ≤ j ≤ i 1\le j\le i 1≤j≤i 满足 ∣ a i , j ∣ ≤ 1 0 9 |a_{i,j}|\le 10^9 ∣ai,j∣≤109。
首先可以知道这道题和dp三角形模型有点关系,所以我们可以先知道对于三角形模型的状态转移是由左下和右下的最大值转移过来。
但是对于这道题给我们加入了一个条件,也就是我们能任选k个数进行乘三操作,这时候会有两个想法。
第一个想法是按照之前的方法进行搜索并且记录下路径,对路径上最大的三个数进行乘三操作,当然这个想法是错误的。
第二个想法是给dp数组多加一个维度,这里可以这样理解,对于要乘的k个数,我们其实很难进行搜索出来,所以我们就可以多加一个维度来代表这个数是乘三还是不乘三,这样就能够使用dp数组表示出来这个情况。
那么这时候就可以得到:f[i][j][times]
代表在点 ( i , j ) (i,j) (i,j)并且剩余乘三次数为 t i m e s times times次的情况下能够得到的最大的数值。
然后再进行记忆化搜索就很容易了,但是这里要注意一个小点,原题给出的三角形中的数据是有可能为负数的,所以我们要把dp数组初始化为负无穷,这个时候我们就必须要多设立一个判重数组进行判重了。
#include <bits/stdc++.h>
using namespace std;
const int N = 110;
const int mod = 1e9 + 7;
const int Mod = 1e9 + 7;
#define int long longint n,k;
int g[N][N];
int f[N][N][N];
bool vis[N][N][N];int dfs(int i,int j,int times){if(vis[i][j][times])return f[i][j][times];vis[i][j][times] = 1;if(i == n){if(times){f[i][j][times] = max(g[i][j],g[i][j]*3);}else f[i][j][times] = g[i][j];return f[i][j][times];}if(times){f[i][j][times] = max(f[i][j][times],dfs(i+1,j+1,times - 1) + g[i][j]*3);f[i][j][times] = max(f[i][j][times],dfs(i+1,j,times - 1) + g[i][j]*3);}f[i][j][times] = max(f[i][j][times],dfs(i+1,j+1,times) + g[i][j]);f[i][j][times] = max(f[i][j][times],dfs(i+1,j,times) + g[i][j]);return f[i][j][times];
}void solve(int times)
{cin >> n >> k;memset(f,-0x3f,sizeof f);for(int i = 1;i <= n;i++){for(int j = 1;j <= i;j++){cin >> g[i][j];}}dfs(1,1,k);int ans = f[1][1][k];cout << ans << endl;
}signed main()
{int T;// cin >> T;T = 1;for (int i = 1; i <= T; i++){solve(i);}return 0;
}
相关文章:

P1544 三倍经验 (记忆化搜索)
三倍经验 题目描述 数字金字塔由 n n n 行整数组成,第 i ( 1 ≤ i ≤ n ) i(1\le i\le n) i(1≤i≤n) 行有 i i i 个数字,一个示例如下。 73 98 1 02 7 4 4 4 5 2 6 5现在你在金字塔的顶部(第一行)&…...

【在Python中创建简单界面计算器】
在Python中创建带有简单界面的计算器,我们可以继续使用Tkinter库,这是一个非常流行且易于使用的GUI库。下面是一个简单的计算器实现,它支持加、减、乘、除四种基本运算。 首先,确保你的Python环境中已经安装了Tkinter。Tkinter通…...

【四范式】浅谈NLP发展的四个范式
自然语言处理(Natural Language Processing,NLP)是计算机科学,人工智能,语言学关于计算机和人类自然语言之间的相互作用的领域,是计算机科学领域与人工智能领域中的一个重要方向。NLP发展到今天已经进入到了…...

--- 数据结构 优先级队列 --- java
之前提高到队列是一种先进先出的结构,但是在某些情况下操作的数据具有优先级,那么对他先进行操作,这时队列就不能满足需求了,因为队列只能操作对头的元素,而具有优先级的数据不一定是在对头,这样就需要优先…...

鸿萌数据恢复服务:如何恢复 Mac 系统中被擦除的文件?
天津鸿萌科贸发展有限公司从事数据安全服务二十余年,致力于为各领域客户提供专业的数据备份、数据恢复解决方案与服务,并针对企业面临的数据安全风险,提供专业的相关数据安全培训。 公司是多款国际主流数据恢复软件的授权代理商,为…...

片段阅读2_中心理解以外题型
目录 一、标题拟定二、下文推断1.三种简单结构:2.三种不易识别结构:三、语句填入1.在开头2.在中间3.在尾句4.盯细节四、语句排序1.宏观把握2.盯住细节五、细节判断一、标题拟定 题型说明:主旨意图题的变型,就是把主旨意图进行“标题化”的改造;正确选项要求:标题中需包含…...

【网络安全 | 渗透工具】IIS 短文件名枚举工具—shortscan安装使用教程
未经许可,不得转载。 文章目录 shortscan安装使用Shortutil 工具shortscan ShortScan 是一种用于在 Microsoft IIS (Internet Information Services) Web 服务器上进行短文件名枚举的工具。该工具可以帮助攻击者利用 IIS 的文件名处理特性,通过预测性扫描枚举服务器上的文件…...

数据结构——栈和队列(队列的定义、顺序队列以及链式队列的基本操作)
目录 队列(queue)的定义 顺序队——队列的顺序表示和实现 顺序队列(循环队列)的类型定义 顺序队列上溢问题的解决方法 编辑 循环队列的基本操作 队列的基本操作——队列的初始化 队列的基本操作——求队列的长度 队列的…...

el-table 的单元格 + 图表 + 排序
<el-table border :data"tableDataThree" height"370px" style"width: 100%"><el-table-column :key"activeName 8" width"50" type"index" label"序号" align"center"></el…...

FPGA第 9 篇,Verilog 中的关键字和基数
前言 在 Verilog 中,关键字(Keywords)和基数(Radix)是语言的重要组成部分,它们有助于描述和定义硬件设计。上期分享了 Verilog 的基本使用,以及数据类型、逻辑值和算数运算符的简单应用&#x…...

什么是单元测试?怎么做?
🍅 点击文末小卡片 ,免费获取软件测试全套资料,资料在手,涨薪更快 一、什么是单元测试? 单元测试(unit testing),是指对软件中的最小可测试单元进行检查和验证。至于“单元”的大小…...

论文复现--基于LeNet网络结构的数字识别
前言 一直就听说学习深度学习无非就是看论文,然后复现,不断循环,这段时间也看了好几篇论文(虽然都是简单的),但是对于我一个人自学,复现成功,我感觉还是挺开心的 本人初学看论文的思路:聚焦网络…...

Vue3 响应式工具函数isRef()、unref()、isReactive()、isReadonly()、isProxy()
isRef() isRef():检查某个值是否为 ref。 isRef函数接收一个参数,即要判断的值。如果该参数是由ref创建的响应式对象,则返回true;否则,返回false。 import { ref, isRef } from vue const normalValue 这是一个普通…...

数据结构之简单选择排序介绍与举例
简单选择排序 简单选择排序是一种排序算法,其基本思想是:通过n-i次关键字间的比较,从n-i1个记录中选出关键字最小的记录,并和第i个记录交换之。 举例: 给定数组 [64, 25, 12, 22, 11],进行简单选择排序。…...

九、Redis 的实际使用与Redis的设计
一、多级缓存架构 在线上系统中,一定不会单纯的只部署一个Redis集群,而是使用Redis结合其他的多级缓存应用进行架构。 使用多级缓存架构的优点就是可以使不同类型的数据分布在不同的应用中,比如redis的热点key可以存储到nginx本地缓存、服务…...

乔拓云模板助力,微信小程序快速上线无需愁备案
想要快速打造并上线自己的微信小程序吗?乔拓云平台是您的不二之选!无需担心复杂的备案流程,乔拓云提供免费服务,远程协助您轻松完成微信小程序的备案工作。 只需简单几步,您的小程序就能闪亮登场:首先&…...

Android命令行查看CPU频率和温度
在 Android 设备上,你可以通过命令行工具 adb 来查看 CPU 温度和 CPU 频率,并确定是否有降频情况。以下是具体步骤: 1. 查看 CPU 频率 你可以使用以下命令来查看 CPU 各个核心的当前频率: adb shell cat /sys/devices/system/c…...

力扣: 翻转字符串里的单词
文章目录 需求分析代码结尾 需求 给你一个字符串 s ,请你反转字符串中 单词 的顺序。 单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。 返回 单词 顺序颠倒且 单词 之间用单个空格连接的结果字符串。 注意:输入字符…...

Wophp靶场寻找漏洞练习
1.命令执行漏洞 打开网站划到最下,此处的输入框存在任意命令执行漏洞 输入命令whoami 2.SQL注入 搜索框存在SQL注入,类型为整数型 最终结果可以找到管理员账户和密码 3.任意文件上传漏洞 在进入管理员后台后,上传木马文件 访问该文件&…...

国内智能运维厂商月度动态 202408
作为市场人员,虽然也添加了各类行业媒体、同行厂商的关注,但被同事问起业内动向时,常常也是记忆模糊、拍破脑袋也说不完整一件事。 所以找机会翻看了一下各大厂商的公号,先做个简单的8月汇总。 格式暂时是这样的: 整…...

C++ 左值与右值浅谈
左值与右值 序言概念左值和右值的划分理解右值引用常量左值引用与右值引用 移动语义引用折叠完美转发 参考资料 序言 虽然平常都算是了解左值,右值的用法,但是好记性不如烂笔头,记下来供大家评鉴,有错改错,有善赞善&a…...

oracle 如何查死锁
在Oracle中查看死锁通常涉及查询数据字典视图和动态性能视图。以下是一个基本的查询示例,用于检测和显示最近的死锁: SELECT dd.inst_id, dd.name, o.object_id, o.object_type, s.sid, s.serial#, s.username, p.spid, s.program,d.xidusn,d.xidslot,d…...

如何编写ChatGPT提示词
为ChatGPT编写有效的提示需要实施几个关键策略,以使文本到文本生成 AI 工具产生所需的输出。您可以使用 ChatGPT 提示(也称为 ChatGPT 命令)来增强您的工作或提高您在各个行业的表现。例如,营销人员可以提示 ChatGPT 为社交媒体帖…...

java项目之基于Spring Boot智能无人仓库管理源码(springboot+vue)
项目简介 智能无人仓库管理实现了以下功能: 基于Spring Boot智能无人仓库管理的主要使用者分为: 管理员的功能有:员工信息的查询管理,可以删除员工信息、修改员工信息、新增员工信息 💕💕作者:…...

大厂前端常见的笔试题目
https://zhuanlan.zhihu.com/p/488383397前端面试手写题目总结-CSDN博客 大厂前端面试中常见的手写代码题目涵盖了多个方面,包括但不限于算法、数据结构、JavaScript 基础知识、DOM 操作、异步编程等。以下是一些常见的手写代码题目及其简要说明: 1. 排…...

网络插件 Cilium 更换 Calico
网络插件 Cilium 更换 Calico 集群使用 submariner ,通过网络检测发现 Cilium 插件可能兼容性不太好 subctl diagnose allCilium 彻底卸载 helm uninstall cilium -n kube-system# 检查集群中的所有 CNI 插件(集群的每个节点都需要删除) s…...

SpringSecurity原理解析(二):认证流程
1、SpringSecurity认证流程包含哪几个子流程? 1)账号验证 2)密码验证 3)记住我—>Cookie记录 4)登录成功—>页面跳转 2、UsernamePasswordAuthenticationFilter 在SpringSecurity中处理认证逻辑是在UsernamePas…...

数据中台 | 数据资源管理平台介绍
01 产品概述 数据资源的盘查、集成、存储、组织、共享等全方位管理能力,无论对于企业的数字化转型,还是对企业数据资产的开发、运营、交易及入表,都具有极为关键的作用。今天,小兵就来为大家介绍我们自研数据智能平台中的核心产品…...

智慧环保平台建设方案
智慧环保平台建设方案摘要 政策导向与建设背景 背景:全国生态环境保护大会提出坚决打好污染防治攻坚战,推动生态文明建设,目标是在2035年实现生态环境质量根本好转。构建生态文明体系,包括生态文化、生态经济、目标责任、生态文明…...

SpringMVC映射请求;SpringMVC返回值类型;SpringMVC参数绑定;
一,SpringMVC映射请求 SpringMVC 使用 RequestMapping 注解为控制器指定可以处理哪些URL请求 1.1RequestMapping修饰类 注解RequestMapping修饰类,提供初步的请求映射信息,相对于WEB应用的跟目录。 注: 如果在类名前࿰…...