蓝桥杯-地宫取宝

news2024/11/17 6:23:17

算法分类:

动态规划 dp


问题描述

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

原因分析:

分析思路 首先 拿到题目会发现题目所给条件非常复杂 分析条件可知 需要解决在方格中恰好取k件物品的不同方案数

因此 考虑状态表示 根据闫氏思考法考虑dp问题 首先路径需要两位维(根据摘花生问题思考 状态表示应该为4维状态 f[i][j][k][c] 表示从(1,1)走到(i,j)时 恰好取k个方案时,且最后一次取得的物品价值为C的方案数

如下图所示 考虑状态计算 在划分状态时 首先考虑最简单的问题 也就是摘花生的问题 元素是从上到下还是从左到右到达该位置的 f[i-1][j] 和 f[i][j-1] 再继续划分

在这两种情况下 根据题目所给条件 最后的方案一定是取k个物品 根据01背包的思考模式 考虑最后一个物品选还是不选 依次为划分依据 不选的时候比较简单 表示不选最后一个格子的物品 也就是f[i][j-1][u][v]和f[i-1][j][u][v]

在选最后一个物品这种情况下 因为题目要求要保证选取的物品价值是单调上升的 所以对于选择最后一个物品这种方案,需要枚举他选择的倒数第二件物品的价值(这里的思考方式参考最长上升子序列问题 )

 

这样就得到了状态计算的方程 注意本题中的细节 1.初始化两个状态 2.枚举选择的物品个数应该从0枚举到k 物品的价值应该从0枚举到13 具体原因见代码注释 


 

实现代码:

#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 55;
const int MOD = 1000000007;
//f[i][j][k][c] 这里的状态方程表示为从(1,1)到(i,j) 刚好取k个物品,且最后一次取的物品的价值为C的方案的个数
int f[N][N][13][14];
int w[N][N];
int n,m,k;
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]++;//这里因为后面用到了价值为-1的点 避免数组越界 让价值从0-12 变成1-13
        }

    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-1][j][u][v])%MOD;
                        //从左到右选择
                    val = (val + f[i][j-1][u][v])%MOD;

                    //取当前格子的物品 只有当取的格子的价值为C时才可以
                    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 res = 0;
    for(int i=0;i<=13;i++) res =(res + f[n][m][k][i]) %MOD;

    cout<<res<<endl;
    return 0;

}

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

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

相关文章

使用DBeaver 连接时序数据库TDengine

介绍 TDengine 是一款高性能、分布式、支持 SQL 的时序数据库 (Database)。 DBeaver 是一款流行、开源的数据库管理工具以及 SQL 客户端&#xff0c;其功能强大&#xff0c;并且支持任何拥有 JDBC-Driver 的数据库&#xff08;这意味着几乎所有数据库都支持&#xff09;。 只…

Java面试常见问题-JVM篇

JVM面试问题汇总①什么是字节码&#xff0c;采用字节码的好处是什么⭐java类加载器有哪些⭐双亲委派模型⭐⭐GC是如何判断对象可以被回收总结了目前主流平台中常见的面试题&#xff0c;标⭐为重点&#xff01; 第一次更新节点&#xff1a;2023.1.8 什么是字节码&#xff0c;采用…

用nvidia-smi查看GPU的状态时,能耗pwr显示为ERR!

用nvidia-smi查看GPU的状态时&#xff0c;能耗pwr显示为ERR&#xff01; 解决方式&#xff1a; 以下代码查看具体的报错: dmesg -l err 如果有: NVRM:***说明硬件问题&#xff0c;需要更换 如果无错误&#xff0c;则参考如下&#xff1a; 1. 将你的工作站或者服务器报错的…

车载激光雷达赛道「新窗口」

车载激光雷达的降本逻辑&#xff0c;除了前装量产规模的加速&#xff0c;还有背后核心供应链的驱动。这也被视为激光雷达新周期的核心竞争力。 Lumotive是一家由微软创始人比尔盖茨投资的初创公司&#xff0c;为激光雷达公司提供基于波束转向技术的核心元器件&#xff0c;采用液…

【寒假每日一题】DAY1.水仙花数

一、题目描述 求0&#xff5e;100000之间的所有“水仙花数”并输出。 什么是水仙花数&#xff1a; “水仙花数”是指一个n位数&#xff0c;其各位数字的n次方之和确好等于该数本身&#xff0c;如:153&#xff1d;1^3&#xff0b;5^3&#xff0b;3^3&#xff0c;则153是一个“水…

前端vue中ts无法识别引入的vue文件,提示找不到xxx.vue模块的解决【引入新建页面或者通过router引入时报错】

一、文章引导 #mermaid-svg-7KdCeocZ1DbrWrKC {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-7KdCeocZ1DbrWrKC .error-icon{fill:#552222;}#mermaid-svg-7KdCeocZ1DbrWrKC .error-text{fill:#552222;stroke:#55222…

联合证券|“仰望”概念爆发,多股涨停!人气龙头股罕见“炸板”

今日涨停股中&#xff0c;以封单金额核算&#xff0c;今飞凯达、联泓新科、灵通动力等涨停板封单资金最多。 涨停家数回落 1月6日&#xff0c;沪深两市股价收盘涨停的有37只&#xff0c;跌停股有14只。下午盘面震动&#xff0c;炸板数量增多&#xff0c;兔宝宝、中远海科、久其…

64. 锚框

1. 锚框 锚框是用来预测真实的边缘框。 2. loU-交并比 ioU用来计算两个框之间的相似度 0表示无重叠&#xff0c;1表示重合 这是Jacquard指数的一个特殊情况 给定两个集合A和B&#xff1a; 杰卡德系数&#xff08;Jaccard&#xff09;可以衡量两组之间的相似性。 给定集合A和…

D. Boris and His Amazing Haircut(线段树)

传送门题意&#xff1a;给定长度为 n 的数组 A &#xff0c;代表 Boris 现在的头发长度&#xff0c;和一个长度为 n 的数组 B &#xff0c;代表他希望的发型的头发长度。理发师手里有 m 把剪刀&#xff0c;每个都只能用一次&#xff0c;剪刀的所剪的高度用 xi 给出。 对于每一把…

ASO优化之苹果和安卓的优化思路

大家都知道&#xff0c;ASO优化是指应用商店的搜索优化&#xff0c;其目的就是通过关键词的覆盖&#xff0c;让APP的搜索排名靠前&#xff0c;带来更多的曝光和用户下载量。 安卓ASO优化的思路: 1&#xff0c;关键词的覆盖。由于现在大部分的安卓商店为了商业化,所以后台几乎…

【C语言进阶】指针经典笔试题

作者:匿名者Unit 目录指针笔试题eg1.eg2.eg3.eg4.指针笔试题 eg1. 我们先来看第一题: int main() {int a[4] { 1, 2, 3, 4 };int *ptr1 (int *)(&a 1);int *ptr2 (int *)((int)a 1);printf( "%x,%x", ptr1[-1], *ptr2);return 0; }我们先来分析ptr1&…

初级篇Nginx笔记

第一章、Nginx的目录结构以及运行原理Nginx的目录结构[rootlocalhost ~]# tree /usr/local/nginx/usr/local/nginx├── client_body_temp # POST 大文件暂存目录├── conf # Nginx所有配置文件的目录│ ├── fastcgi.conf # fastcgi相关参数的配置文件│ ├── fastcgi.…

在maven项目当中创建第一个jdbc程序

大家好&#xff0c;今天给大家分享在Maven环境中创建jdbc程序 这是Maven项目的创建方式 跟着一步一步做就可以了 然后&#xff0c;创建好的Maven项目应该是这样的 导入相关的依赖 <dependencies><!-- https://mvnrepository.com/artifact/mysql/mysql-connector-ja…

PHP date() 函数

PHP date() 函数用于格式化时间/日期。 PHP date() 函数 PHP date() 函数可把时间戳格式化为可读性更好的日期和时间。 时间戳是一个字符序列&#xff0c;表示一定的事件发生的日期/时间。 语法 string date ( string $format [, int $timestamp ] ) 参数描述format必需。规…

Python下载ts文件视频且合并

目录 一、ts文件的由来 二、下载ts文件 1.下载index.m3u8&#xff0c;并做相应处理 2.下载ts文件 三、合并ts文件 一、ts文件的由来 ts文件&#xff0c;ts即"Transport Stream"的缩写&#xff0c;特点就是要求从视频流的任一片段开始都是可以独立解码的&#xff…

Pytorch 权重衰减

目录 1、权重衰减 2、L2正则化和L1正则化 3、高维线性回归演示权重衰减 1、权重衰减 一般来说&#xff0c;我们总是可以通过去收集更多的训练数据来缓解过拟合。 但这可能成本很高&#xff0c;耗时颇多&#xff0c;或者完全超出我们的控制&#xff0c;因而在短期内不可能做到…

OpenTelemetry日志体系

前言 OpenTelemetry为了实现其可观测性有三大体系&#xff1a;Trace&#xff0c;Metrics和Log。本文将对于OpenTelemetry实现的日志体系进行详细的讲述。 日志 说到日志相比大家都能侃侃而谈&#xff1a;帮助快速定位出现的问题&#xff0c;数据追踪&#xff0c;性能分析等等…

联合证券|新年再现“A吃A” 建发股份拟控股美凯龙

2022年&#xff0c;A股上市公司之间的并购超越10起。2023年伊始&#xff0c;上市公司“A吃A”或将再添新事例。 建发股份(600153)1月8日晚公告&#xff0c;公司正在谋划经过现金方法协议收购红星美凯龙控股集团有限公司&#xff08;以下简称“红星控股”&#xff09;持有的美凯…

导致 MySQL 索引失效

1、索引失效情况1&#xff1a;非最左匹配 最左匹配原则指的是&#xff0c;以最左边的为起点字段查询可以使用联合索引&#xff0c;否则将不能使用联合索引。 我们本文的联合索引的字段顺序是 sn name age&#xff0c;我们假设它们的顺序是 A B C&#xff0c;以下联合索引的…

YOLOv8来啦 | 详细解读YOLOv8的改进模块!YOLOv5官方出品YOLOv8!

YOLOv8是Ultralytics开发的 YOLO&#xff08;You Only Look Once&#xff09;物体检测和图像分割模型的最新版本&#xff0c;详细介绍可以参考Ultralytics发布的网址&#xff0c;可以通过ultralytics python 包获取代码&#xff0c;暂时还没有官方公布代码 安装ultralytics py…