*地宫取宝c++

题目

输入样例1:

2 2 2
1 2
2 1

输出样例1:

2

输入样例2:

2 3 2
1 2 3
2 1 5

输出样例2:

14
思路

题目说从入口开始,只能向右或向下行走到达右下角,类似“摘花生”这道题的模型。题目又说只有当格子里的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它,也就说拿到的宝贝价值严格单调递增,是“单调递增子序列”的模型。

状态表示
        那用几维才能表示一个状态呢?首先,需要用 i, j 来表示从起点走到 (i, j) 这个格子的所有路径方案数;然后,需要用ki来表示从起点走到(i, j)这个格子拿了多少个物品;最后,由于拿到的宝贝价值要严格单调递增,因此需要用C表示拿到的最后一个物品的价值。

        那为什么我们不用最后一个物品的坐标来表示状态呢,通过坐标也可以得到最后一个物品的价值啊?因为有50 x 50个坐标,并且是这样做会使一个状态表示的维数达到五维,时间复杂度也会增加。题目中取到宝贝的价值有限(0≤Ci≤12),因此可以用C代表最后取到的宝贝的最大值即可,这样可以将维数降到四维。

        综上所述,我们可以将集合f[i][j][ki][c]定义为所有从起点走到(i,j),且已经取了ki件物品,且最后一件物品的价值是C的合法方案的集合。集合属性为满足集合定义的方案数总和。

状态计算:
由于到达(i, j)这个点只能从左边或上边来,因此可以将集合划分为所有最后一步是从上往下走的走法的集合和所有最后一步是从左往右走的走法的集合。而对于所有最后一步是从上往下走的走法的集合,又可以划分为取不取(i, j)这个格子的宝贝这两个小的集合,当要取(i, j)这个格子的宝贝时,说明这个格子里宝贝价值value比前面拿到的任何宝贝的价值都大,并且,根据集合定义,f[i][j][ki][c]存的是最后一件物品的价值是c的合法方案的集合,因此,当枚举c时,若要取(i, j)这个格子的宝贝还需要满足value等于c。

边界处理
        需要注意的是,由于宝贝的价值可能为0,当左上角格子的的宝贝价值为0时,不拿可以表示为f[1][1][0][0] = 1,但下一步(向右或向下走)遇到一个格子的宝贝价值为0,就不能拿了,因为题目要求拿到的宝贝价值要严格单调递增;而实际上,若没有拿左上角格子价值为0的宝贝,在下一步遇到一个价值为0的宝贝是可以选择拿或不拿的。

        对此,我们可以将所有格子里宝贝的价值都加上1,宝贝价值区间变成1≤Ci≤13;当c为0时表示还没有拿过任何一件宝贝,“最后一个物品价值为0”。这样处理后,当左上角格子的的宝贝价值为1时,不拿可以表示为f[1][1][0][0] = 1,当下一步(向右或向下走)遇到一个格子的宝贝价值为1,就可以选择拿或不拿了。

        int 范围为2.1 x 10^9,因此val最多加两个数就要取模了。

代码
#include<bits/stdc++.h>
using namespace std;
const int MOD = 1000000007, N = 55;
int a[N][N], f[N][N][13][14];
int n, m, k, res;int main()
{cin >> n >> m >> k;for (int i = 1; i <= n; i ++){for (int j = 1; j <= m; j ++){cin >> a[i][j];a[i][j] ++;}}int res = 0;f[1][1][1][a[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;for (int ki = 0; ki <= k; ki ++){for (int value = 0; value <= 13; value ++){int &val = f[i][j][ki][value];//不能选(i, j)这个格子里的宝贝//从上往下走,并且不取(i, j)上的宝贝的方案数val = (val + f[i - 1][j][ki][value]) % MOD;//从左往右走,并且不取(i, j)上的宝贝的方案数val = (val + f[i][j - 1][ki][value]) % MOD;if (ki > 0 && value == a[i][j]){for (int c = 0; c < value; c ++){//从前面的状态中选价值c < value并且选了ki - 1件的fval = (val + f[i - 1][j][ki - 1][c]) % MOD;val = (val + f[i][j - 1][ki - 1][c]) % MOD;}}}}}}for (int i = 0; i <= 13; i ++) res = (res + f[n][m][k][i]) % MOD;cout << res;return 0;
}

感觉DP就是根据集合定义打好表,算出全部的状态的值,然后查询表中符合题目要求的状态值。

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

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

相关文章

数字化浪潮下的选择:ETU-LINK光模块写码板全新升级至400G

随着光模块市场的蓬勃发展&#xff0c;ETU研发团队致力于不断改进SFP编码工具&#xff0c;以满足日益增长的客户需求。经过不懈努力&#xff0c;我们成功推出了3.0版本的写码板&#xff0c;在硬件和软件方面都进行了全面升级&#xff0c;为用户带来了极大的便利。今天&#xff…

华为鸿蒙系统接入实人认证 蚂蚁蚁盾提供技术支持

随着华为千帆计划持续推进&#xff0c;鸿蒙生态日渐完善。近日&#xff0c;华为自研的鸿蒙操作系统与蚂蚁数科、阿里云合作开发的实人认证产品完成适配。这意味着基于鸿蒙系统开发的 App 可以 0 门槛接入该实人认证产品&#xff0c;鸿蒙用户可以无感享受到和安卓、IOS 系统一样…

一文弄懂空间金字塔池化网络

目录 空间金字塔池化网络是什么&#xff1f; 组成部分和工作原理 具体步骤 ​编辑 主要优点 空间金字塔池化网络是什么&#xff1f; 空间金字塔池化网络&#xff08;Spatial Pyramid Pooling Network&#xff0c;SPPNet&#xff09;是一种用于处理具有不同尺寸和比例的输入…

前端网络相关面试题

1. GET和POST请求的区别 传递参数不同&#xff1a; POST传递的参数在request body中GET传递的参数在url后拼接 GET请求一般用于查询&#xff0c;POST一般用于提交某种信息进行某些修改操作 POST相对GET请求安全 GET请求会被浏览器主动缓存&#xff0c;POST不会&#xff0c;要…

蓝牙耳机哪个好?2024年蓝牙耳机推荐榜单,新手上路!

​面对市场上种类繁多的蓝牙耳机&#xff0c;许多用户感到困惑不解。作为一个耳机爱好者&#xff0c;我根据自己的使用经验&#xff0c;整理了一些我认为值得推荐的蓝牙耳机&#xff0c;希望能为大家在选购时提供一些参考。 一、蓝牙耳机选购指南 1. 佩戴舒适度排名——开放式…

单元测试,写起来到底有多痛?

到底什么是单元测试 这个问题看似非常简单&#xff0c;单元测试嘛&#xff0c;不就是咱们开发自己写些测试类&#xff0c;来测试自己写的代码逻辑对不对。 这句话没有问题&#xff0c;但是不够准确。 首先我们要明白&#xff0c;这个测试二字前面还有两个字&#xff1a; 单元 。…

Windows-WSL2-VSCode+Docker配置C++开发环境

Windows-WSL2-VSCodeDocker配置C开发环境 写在前面 因为在学习工作中&#xff0c;需要不同的编码环境&#xff0c;若将这些不同的开发环境都状态一台设备上&#xff0c;很容易出问题&#xff0c;而且迁移性差&#xff0c;于是计划把不同的开发环境用docker隔离开来&#xff0…

git clone拉取项目报错Filename too long warning:Clone succeeded,but checkout failed

这个坑可太坑了~ 首先原因是&#xff1a;拉取项目中有文件名过大&#xff0c;导致拉取项目中断&#xff0c;文件拉取不完全的情况。 1、报错信息如下&#xff1a; try/*****: Filename too long2、解决方法&#xff0c;找到你要存放代码的文件夹&#xff0c;打开git命令执行…

面向对象编程第一式:封装 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

PMP考试心得,与大家共勉

本人刚刚通过PMP考试&#xff0c;有一些自己的经历&#xff0c;写出来欢迎已经是PMP的兄弟们指正&#xff0c;希望能给正在PMP之路上奔跑的人们一些帮助。 其实很早就听说过PMP认证考试了&#xff0c;但是一直工作很忙没有时间来投入学习考试。因此一直拖到今年夏天才有时间参加…

耐腐蚀PFA气体洗涤瓶可多级串联透明特氟龙塑料氢气吸收装置

洗气瓶是一种常用于净化和干燥各种气体的实验室器皿&#xff0c;以去除其中的水分、油脂、颗粒物等杂质&#xff0c;从而使需要用到的气体满足实验要求。 PFA洗气瓶的工作原理&#xff1a; 主要是通过液体吸收、溶解或发生化学反应来去除气体中的杂质。在洗气过程中&#xff…

Java技术栈 —— Stream流式编程

首先&#xff0c;这里的Stream编程和I/O的Stream流是不一样的&#xff0c;一开始我挺不习惯这种编程范式的&#xff0c;但到了后面&#xff0c;发现这样写可以在一行代码中做很多事情&#xff0c;于是也接受了。 参考文章或视频链接[1] A Guide to Java Streams in Java 8: In…

鸿蒙 线程模型

前提&#xff1a;基于官网3.1/4.0文档。参考官网文档 基于Android开发体系来进行比较和思考。&#xff08;或有偏颇&#xff0c;自行斟酌&#xff09; 一、概念 HarmonyOS应用中每个进程都会有一个主线程&#xff0c;主线程有如下职责&#xff1a; 执行UI绘制&#xff1b; 管理…

加速布局Wi-Fi及蓝牙市场!移远通信再推四款高性能模组新品

3月12日&#xff0c;全球领先的物联网整体解决方案供应商移远通信宣布&#xff0c;其已正式推出四款新型Wi-Fi和蓝牙模组新品&#xff0c;旨在继续致力于满足物联网行业不断升级的应用需求&#xff0c;为智慧家居、工业互联、储能、充电桩等各种场景提供一站式创新解决方案。 此…

Kotlin 空类型,区间,数组

目录 1. 空类型 2. 区间 3. 数组 1. 空类型 我们知道任何一种数据类型都有为空或不为空两种状态&#xff0c;在 Kotlin 中&#xff0c;若允许一个数据为空&#xff0c;则需要使用 "?"&#xff0c;默认都不能为空。 代码举例说明 // 给 notNull赋值为空&#x…

LeetCode2864. Maximum Odd Binary Number

文章目录 一、题目二、题解 一、题目 You are given a binary string s that contains at least one ‘1’. You have to rearrange the bits in such a way that the resulting binary number is the maximum odd binary number that can be created from this combination.…

Linux(CentOS7.5):创建用户,并设置用户根目录及权限

一、背景说明 1、创建一个新用户&#xff1a;test_user。 2、该用户登录后&#xff0c;默认目录为&#xff1a;/opt/project&#xff0c;且仅可操作该目录。 3、该用户需要jdk的执行权限。 4、该用户需要nginx的使用权限。 5、设&#xff1a; jdk目录为&#xff1a;/opt/jdk/jd…

2023.5.9工作问题记录————安卓GKI检测abi-check

GKI ABI-check SOP ABI check是用于校验生成的kernel中ko与google释放的ko所计算出来的CRC是否相等。 在GKI版本中&#xff0c;很多kernel中的配置有y变成了m&#xff0c;编译成了ko&#xff0c;XTS测试时&#xff0c;会替换boot镜像&#xff0c; 替换成google释放的boot.img&…

Vue3组件详情

Vue3组件详情 一、父组件向子组件传值 ref、props二、子组件向父组件传值 emit三、子组件向父组件传值 v-model四、setup语法糖1、基本用法2、data和methods3、计算属性 computed4、监听器 watch、watchEffect5、自定义指令 directive6、import导入的内容可以直接使用7、声明pr…

Flume集成Kafka

之前提到Flume可以直接采集数据存储到HDFS中&#xff0c;那为什么还要引入Kafka这个中间件呢&#xff0c;这个是因为在实际应用场景中&#xff0c;我们既需要实时计算也需要离线计算。 Kfka to HDFS配置 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.…