蓝桥杯-地宫取宝

news/2024/10/3 0:23:31

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

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

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

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

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

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

输入格式

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

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

输出格式

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

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

数据范围

1≤n,m≤50,
1≤k≤12,
0≤Ci≤12

输入样例1:

2 2 2
1 2
2 1

输出样例1:

2

输入样例2:

2 3 2
1 2 3
2 1 5

输出样例2:

14

题解:

f[n][m][k][c] 表示的是 从(1, 1) 到 (n, m), 选 k 个物品, 并且是以 c 结尾的所有方案的数量
因为 c是[0,12], 所以最终答案是 res + f[n][m][k][ci], ci 是[0, 12]

集合: 从(1, 1) 到 (n, m), 选 k 个物品, 并且是以 c 结尾的所有方案
属性: 数量

状态计算:

  1. 从(i, j)左边到(i, j)的, 不取第(i, j)件物品
  2. 从(i, j)上边到(i, j)的, 不取第(i, j)件物品
  3. 从(i, j)左边到(i, j)的, 第(i, j)件物品
  4. 从(i, j)上边到(i, j)的, 第(i, j)件物品

如下图:

注意: 我们f数组的第四维是代表 以 c 结尾, 但是题中 c = [0,12], 所以我们可以把每个 c 都加1, 也就是w[i][j] + 1. 这样我们 f 的第四维在没有取任何物品时就可以用 下标 0 表示了

看不懂的话, 可以先看这两个题, 摘花生 和 最长上升子序列, 本题是前两道题的揉和

#include <bits/stdc++.h>
using namespace std;
const int N = 55, MOD = 1000000007;int w[N][N], n, m, k;
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; // 初始话的跳过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][j - 1][u][v]) % MOD;  // 状态计算 1val = (val + f[i - 1][j][u][v]) % MOD;  // 状态计算 2if (u > 0 && w[i][j] == v){for (int c = 0; c < v; c ++)val = (val + f[i][j - 1][u - 1][c]) % MOD, // 状态计算 3val = (val + f[i - 1][j][u - 1][c]) % MOD; // 状态计算 4}}}int res = 0;for (int i = 0; i <= 13; i ++) res = (res + f[n][m][k][i]) % MOD;cout << res << endl;return 0;
}

觉得写的不错的话, 点个赞吧~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Nginx负载均衡、动静分离Tomcat案例实战

一、前言 1)Tomcat是一款开源的、免费的WEB软件服务器,是隶属于Apache基金会旗下的,主要是用于去发布网站代码、提供网页信息服务的。用户通过浏览器可以实现网站页面的访问。 2)Tomcat WEB软件默认可以处理静态网页(Apache、Nginx),同时也可以处理动态网页,主要是处理…

three.js基础之小案例

静态场景 <canvas id="mainCanvas"></canvas> <script type="importmap">{"imports": {"three": "./js/build/three.module.js","three/addons/": "./js/jsm/"}} </script> &l…

国密算法SM2-java实现

Maven依赖<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.56</version> </dependency>工具类import java.math.BigInteger;public class Util {/*** 整形转换成网络传输…

黑客精神和白帽子

在当今数字化的世界里,黑客精神和白帽子的角色变得愈发重要。本文将探讨黑客精神的本质,介绍白帽子的概念和职责。 1、黑客精神 所谓的“黑客精神”,主要指的是一种探索计算机软件和硬件极限,追求技术创新和完善的文化态度和哲学理念。 黑客精神强调的是对知识的渴求,对于…

NFS工作原理(重要)

NFS工作流程 1.NFS服务端启动后、将自己的端口信息,注册到rpcbind服务中 2.NFS客户端通过TCP/IP的方式,连接到NFS服务端提供的rpcbind服务,并且从该服务中获取具体的端口信息 3.NFS客户端拿到具体端口信息后,将自己需要执行的函数,通过网络发给NFS服务端对应的端口 4.NFS服…

mysql多表查询

1. 多表查询项目开发中,在进行数据库表结构设计时,会根据业务需求及业务模块之间的关系,分析并设计表结构,由于业务之间相互关联,所以各个表结构之间也存在着各种联系,基本上分为三种:一对多(多对一) 多对多 一对一2. 分类连接查询内连接:相当于查询A、B交集部分数据外…

text-generation-webui 推理模型相关报错问题解决

推理代码 text-generation-webui 推理模型 Qwen1.5-7B-Chat sys info nvcc --versioncuda 11.8 import torch >>> print(torch.__version__) 1 路径错误2 依赖没安装 ImportError: This modeling file requires the following packages that were not found in your …

通过 pip 安装自己的代码包

以前通过 pip 安装的时候总是很羡慕,别人的代码使用起来好方便啊,那时候觉得代码要提交到 pip 平台去管理肯定需要审核吧? 后来了解到自己的代码要可以 pip 安装不需要审核,只需要遵循几个步骤就能轻松实现:准备代码包 通过 setuptools 打包 通过 twine 上传 (需要 pypi …