1212. 地宫取宝

news/2024/7/5 7:54:13

题目:

1212. 地宫取宝 - AcWing题库

 

 思路:dp(最长上升子序列和摘花生的结合)

代码:

 

#include<iostream>
using namespace std;
const int N = 55;
const int MOD = 1000000007;

int n, m, k;
int w[N][N];//每个坐标格子上宝贝的价值

int f[N][N][13][14];/*f是当前条件下的方案数量。
前两维表示坐标
三维表示已经取得的宝贝数量
四维表示已经取得的宝贝中的最后一个宝贝的价值(即当前最大)*/

int main()
{
	//输入行n列m以及所需要的宝贝数量k
	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进行初始化,将每个宝贝的价值都加一,不影响结果
		}

	//f初始化
	f[1][1][0][0] = 1;//起点,不拿起点坐标格子上的宝贝
	/*此时没有取任何一件宝贝,故存入的最大值为空,应该比所以宝贝的价值都小。
	宝贝原本的最小值为0,但下标不能取负数,这也是为何上面要将宝贝的整体价值加一的原因*/
	f[1][1][1][w[1][1]] = 1;//起点,拿起点坐标格子上的宝贝
	
	for(int i=1;i<=n;i++)//一维横坐标
		for (int j = 1; j <= m; j++) {//二维纵坐标
			if (i == 1 && j == 1)continue;//f的第一行第一列已经初始化过了

			for(int u=0;u<=k;u++)//三维表示已经取得宝贝数量
				for (int v = 0; v <= 13; v++)//四维表示已取得宝贝的最大价值
				{
					//不取当前空格的宝贝
					f[i][j][u][v] = (f[i][j][u][v] + f[i - 1][j][u][v]) % MOD;//存图左上角
					f[i][j][u][v] = (f[i][j][u][v] + f[i][j - 1][u][v]) % MOD;//存图左上角

					//取当前空格的宝贝
					if (u > 0 && v == w[i][j])//此时当前格子上的宝贝的价值为最大v
					{
						for (int c = 0; c < v; c++)
						{
							f[i][j][u][v] = (f[i][j][u][v] + f[i - 1][j][u - 1][c]) % MOD;//图左下
							f[i][j][u][v] = (f[i][j][u][v] + f[i][j - 1][u - 1][c]) % MOD;//图右下
						}
					}
				}
		}
	int res = 0;//累加器,求到达右下角(m,n)时所以取得宝贝数量为k且满足递增条件的情况
	for (int i = 0; i <= 13; i++)res = (res + f[n][m][k][i]) % MOD;
	cout << res << endl;

}


http://lihuaxi.xjx100.cn/news/1766960.html

相关文章

图形界面应用案例——关灯游戏(以及扩展)(python)

7.8 图形界面应用案例——关灯游戏 题目: [案例]游戏初步——关灯游戏。 关灯游戏是很有意思的益智游戏,玩家通过单击关掉(或打开)一盏灯。如果关(掉(或打开)一个电灯,其周围(上下左右)的电灯也会触及开关,成功地关掉所有电灯即可过关。 图7-43 关灯游戏运行效…

Gerrit lfs安装及配置

Gerrit版本&#xff1a;3.1.4 lfs下载&#xff1a;Zuul Gerrit CI界面已经没有3.1.4对应版本的lfs.jar了&#xff0c;需要从上面的页面下载。 一、安装配置lfs 将上面下载的lfs.jar放到$GERRIT_SITE/plugins目录。 修改配置文件&#xff1a;$GERRIT_SITE/etc/gerrit.config …

2023/11/8JAVA学习

多个条件也可以&&放在一块,支持链式编程 map()数据加工,一个对象转化为另一个 不能这样写 不会去重报错

小程序制作(超详解!!!)第十五节 自动随机变化的三色旗

1.例题描述 设计一个小程序&#xff0c;开始时界面上显示一个三色旗和一个按钮&#xff0c;当点击按钮时&#xff0c;三色旗的颜色会发生随机变化&#xff0c;即使不点击按钮&#xff0c;三色旗的颜色也会每隔一定时间自动发生变化。 2.index.wxml <view class"box&…

Python算法例8 将整数A转换为B

1. 问题描述 给定整数A和B&#xff0c;求出将整数A转换为B&#xff0c;需要改变bit的位数。 2. 问题示例 把31转换为14&#xff0c;需要改变2个bit位&#xff0c;即&#xff1a;&#xff08;31&#xff09;10&#xff08;11111&#xff09;2&#xff0c;&#xff08;14&…

基于SSM的二手车交易网站的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

Windows安装svn命令

1、svn命令下载地址 https://www.visualsvn.com/downloads/; 2、安装svn命令 3、测试svn命令是否安装成功

如何优雅的写出Python代码?十年老程序员教你关于Python的七条重要技巧~

文章目录 前言一、规范命名二、面向对象三、使用 with四、使用 get五、提前返回六、生成器七、0x06 装饰器关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战案例③Python小…