每日算法打卡:地宫取宝 day 16

文章目录

    • 原题链接
    • 题目描述
        • 输入格式
        • 输出格式
        • 数据范围
        • 输入样例1:
        • 输出样例1:
        • 输入样例2:
        • 输出样例2:
    • 题目分析
    • 示例代码

原题链接

1212. 地宫取宝

题目难度:中等

题目来源:第五届蓝桥杯省赛C++ A/B/C组,第五届蓝桥杯省赛Java B/C组

题目描述

X 国王有一个地宫宝库,是 n × m n \times m n×m 个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签。

地宫的入口在左上角,出口在右下角。

小明被带到地宫的入口,国王要求他只能向右或向下行走。

走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。

当小明走到出口时,如果他手中的宝贝恰好是 k k k 件,则这些宝贝就可以送给小明。

请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这 k k k 件宝贝。

输入格式

第一行 3 个整数, n , m , k n,m,k n,m,k,含义见题目描述。

接下来 n n n 行,每行有 m 个整数 C i C_i Ci 用来描述宝库矩阵每个格子的宝贝价值。

输出格式

输出一个整数,表示正好取 k k k 个宝贝的行动方案数。

该数字可能很大,输出它对 1000000007 1000000007 1000000007 取模的结果。

数据范围

1 ≤ n , m ≤ 50 1 \le n,m \le 50 1n,m50,
1 ≤ k ≤ 12 1 \le k \le 12 1k12,
0 ≤ C i ≤ 12 0 \le C_i \le 12 0Ci12

输入样例1:
2 2 2
1 2
2 1 
输出样例1:
2 
输入样例2:
2 3 2
1 2 3
2 1 5 
输出样例2:
14 

题目分析

这道题和之前的摘花生的题目是十分类似,其实就是一个扩展与限制,这里有一个限制就是需要以严格递增的顺序拿,另一个限制就是最后拿到的数量必须是k件

我们仍然是采用集合的DP思想,对于集合 f ( i , j , k , c ) f(i,j,k,c) f(i,j,k,c)这里的i,j表示当前的坐标,k表示当前取到了多少个,c表示取到物品的数值,确保其是递增的。他的意思就是,从七点走到i,j取了k件物品,最后一个物品的价值是c的所有合法方案的集合

对于这个集合如何进行状态计算,就是如何进行状态划分,因为这个题目的状态非常多,就需要逐步分析,就像剥洋葱一样,一层一层细分,第一层是按照位置分,分别从上向下走和从左向右走两种,第二层是按照第i,j个物品是否取得划分,那么对于取的情况下,对于每一个上一个物品的数值是多少再次进行划分

我们逐步分析每一种情况的状态计算具体是什么

对于从上往下的不取的情况 f ( i , j , k , c ) = f ( i − 1 , j , k , c ) f(i,j,k,c)=f(i-1,j,k,c) f(i,j,k,c)=f(i1,j,k,c)因为不取,所以对k和c没有任何影响,对于从左往右的情况也是相同的

对于取的情况来说,他需要满足在取的时候这个位置上的权值必定为c,因为在取之后c一定是之前所有取到的数值的最大值

这个问题我们需要考虑一下边界的初始化问题,起点有两种情况,第一种就是选择第一个位置的数字 f ( 1 , 1 , 1 , w ( 1 , 1 ) = 1 f(1,1,1,w(1,1)=1 f(1,1,1,w(1,1)=1,如果不选择第一个位置的数字就是 f ( 1 , 1 , 0 , − 1 ) = 1 f(1,1,0,-1) = 1 f(1,1,0,1)=1当然这里的-1是不合法的,我们可以给所有的权值加1即可

示例代码

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;const int N = 55,MOD=1000000007;int n,m,k;
int w[N][N];
int f[N][N][13][14];int main()
{cin>>n>>m>>k;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){cin>>w[i][j];w[i][j]++;}}// 初始化f[1][1][1][w[1][1]] = 1; // 表示选择第一个数,是一类方案f[1][1][0][0] = 1; // 表示不选第一个数,是一类方案for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(i==1&&j==1) continue; // 表示1,1位置已经初始化过了for(int u=0;u<=k;u++){for(int v=0;v<=13;v++){int &val = f[i][j][u][v]; // 起别名方便表示val = (val+f[i-1][j][u][v])%MOD; // 表示不选择这个数val = (val+f[i][j-1][u][v])%MOD;if(u>0&&v==w[i][j]) // 如果选择{for(int c=0;c<v;c++){val = (val + f[i-1][j][u-1][c])%MOD;val = (val + f[i][j-1][u-1][c])%MOD;}}}}}}int ans = 0;for(int i=0;i<=13;i++) ans = (ans + f[n][m][k][i])%MOD;cout<<ans<<'\n';return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/626800.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring基于AOP(面向切面编程)开发

概述 AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续&#xff0c;是软件开发中的一个热点&#xff0c;也是Spring框架中的一个重要内容&…

鸿蒙开发之手势Pan

Entry Component struct OfficialPanGesturePage {State message: string 默认只左右移动State offsetX: number 0State offsetY: number 0State positionX: number 0State positionY: number 0//默认pan的参数&#xff0c;1根手指&#xff0c;左右方向private panOption:…

Audio Precision SYS-2722音频分析仪

181/2461/8938产品概述&#xff1a; 2700系列专为需要最高性能的音频工程师而设计&#xff0c; 最低的失真和最大的灵活性。 2722的真正双域架构实现了以下方面的无与伦比的测量 模拟和数字信号:模拟发生器和分析仪性能超过 任何基于数字转换器的设计&#xff0c;而数字分析技…

三、基础篇 vue Class与Style绑定

操作元素的 class 列表和内联样式是数据绑定的一个常见需求。因为它们都是 attribute&#xff0c;所以我们可以用 v-bind 处理它们&#xff1a;只需要通过表达式计算出字符串结果即可。不过&#xff0c;字符串拼接麻烦且易错。因此&#xff0c;在将 v-bind 用于 class 和 style…

【面试突击】计算级网络面试实战(上)

&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308;&#x1f308; 欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术 的推送 发送 资料 可领取 深入理…

2024年美赛美国大学生数学建模竞赛ABCDEF题思路资料汇总贴

下文包含&#xff1a;2024年美国大学生数学建模竞赛&#xff08;美赛&#xff09;A- F题思路解析、选题建议、代码可视化及如何准备数学建模竞赛&#xff08;2号发&#xff09; C君将会第一时间发布选题建议、所有题目的思路解析、相关代码、参考文献、参考论文等多项资料&…

关于跨域引用界面cookie不支持的处理

缘由&#xff1a;项目上与其他公司做对接&#xff0c;对方使用iframe引用我方项目&#xff0c;不使用nginx做代理&#xff0c;设置了老三样跨域请求头&#xff08;Access-Control-Allow&#xff09;&#xff0c;发现跨域cookie不识别&#xff0c;每次请求时返回头都携带新cooki…

docker filebeat 将日志多级目录和多维json数据日志同步到es

注 使用的时候先调试调试配置,调试成功在尝试写入es,如果es写入失败就是es账户.密码/白名单.和index未创建的问题,细节可以留言 setup.template.priority 模板优先级 调整这个可以配置一台机器多个filebeat 容器启动 多级目录日志和多维josn日志结构 filebeat.inputs:- typ…

如何使用ThinkPHP框架(thinkphp8.0)创建定时任务?

1、安装定时任务composer包 composer require easy-task/easy-task 2、创建命令行处理类文件 php think make:command Task task 会生成文件&#xff1a;app\command\Task.php 将Task.php文件内容修改如下&#xff1a; <?php declare (strict_types1);namespace app…

Jira REST API_检索多选自定义字段的可用选项

文章目录 背景解决方案背景 Jira Server/Data Center REST API不提供简单检索多选项自定义字段可用的所有选项的方法,只有 rest/api/2/customFieldOption/{id} API 获取指定的id的option值。 本文提供一种解决方法,,用于在通过 REST API 创建或编辑问题之前检索所有自定义字…

Linux:为什么要打包和压缩?

我们在Linux中已经学习了zip/unzip和tar两种方式来打包压缩文件&#xff0c;那么为什么要打包和压缩呢&#xff1f; 最直接的目的就是为了便于网络传输&#xff0c;防止传输过程中的数据丢失 举例实践 我们做个示例演示一下 我们创建一百个文件 我们将文件都放到dir里面来&…

UDP传输总丢包?常用的解决方式在这里!

UDP是一种无连接的协议&#xff0c;传输数据时不建立连接&#xff0c;因此可能导致数据包丢失。UDP丢包是指在传输过程中由于各种原因导致数据包未能到达目的地。UDP丢包会影响传输的质量和效率&#xff0c;导致数据损失、延迟&#xff0c;甚至导致传输失败。本文将分析UDP丢包…

上门按摩APP系统公众号H5搭建能为客户带来哪些便捷。

大家好&#xff01;今天我来给大家介绍一下上门按摩系统H5搭建。你有没有曾经因为工作疲劳、肌肉酸痛而感到身体不适&#xff1f;或者是因为长时间坐在电脑前&#xff0c;感觉脖子和肩膀快要僵硬了&#xff1f;如果你有这样的困扰&#xff0c;那么上门按摩系统公众号绝对是你的…

高光谱分类论文解读分享之基于多模态融合Transformer的遥感图像分类方法

IEEE TGRS 2023&#xff1a;基于多模态融合Transformer的遥感图像分类方法 题目 Multimodal Fusion Transformer for Remote Sensing Image Classification 作者 Swalpa Kumar Roy , Student Member, IEEE, Ankur Deria , Danfeng Hong , Senior Member, IEEE, Behnood Ras…

Hive 数据迁移

一、需求 同步集团的数据到断直连环境。 二、思路 三、同步数据&#xff08;方案&#xff09; 1、环境&#xff1a;断直连模拟环境 2、操作机器&#xff1a;ETL 机器 XX.14.36.216 3、工作路径&#xff1a;cd /usr/local/fqlhadoop/hadoop/bin 4、执行命令&#xff1a; 命令…

文心一言 vs. ChatGPT:哪个更胜一筹?

文心一言 vs. ChatGPT&#xff1a;从简洁美到深度思考的文本生成之旅 近年来&#xff0c;文本生成工具的崛起使得人们在表达和沟通方面拥有了更多的选择。在这个领域中&#xff0c;文心一言和ChatGPT作为两个备受瞩目的工具&#xff0c;各自以独特的优势展现在用户面前。本文将…

【cuda】Visual Studio中进行CUDA程序的性能评估

在Visual Studio中使用Nsight进行CUDA应用程序的性能评估可以按照以下步骤进行&#xff1a; 步骤 1: 准备工作 确保已经安装了以下组件&#xff1a; 最新版本的NVIDIA驱动。NVIDIA Nsight Visual Studio Edition&#xff08;通常与CUDA Toolkit一起安装&#xff09;。Micros…

history 模式刷新 404 问题解决方法

在使用 Vue Router 的 history 模式时&#xff0c;刷新页面可能会导致出现 404 错误。这是因为 history 模式依赖于浏览器的 history.pushState API 来管理路由状态&#xff0c;而刷新页面时浏览器会向服务器发送请求&#xff0c;服务器无法正确地解析这些路由并返回对应的页面…

网络设备自动巡检脚本

简介 工作中经常需要对客户的网络设备进行巡检&#xff0c;之前都是用SecureCRT开启记录Log Session&#xff0c;依次远程登录到每个设备上&#xff0c;依次输入巡检命令收集设备巡检信息&#xff1b; 现在希望利用Python能够实现自动登录设备&#xff0c;自动抓取巡检信息&am…

使用新版IDEA社区版创建一个springboot项目(完整详细版)

目录 一、添加依赖二、下载JDK三、配置Maven阿里云镜像Idea中的maven配置当前项目新项目&#xff08;即默认的配置&#xff09; 四、创建项目四、测试项目错误1错误2错误3完整的pom.xml测试结果 IDEA各版本下载链接&#xff1a;https://www.jetbrains.com/zh-cn/idea/download/…