蓝桥杯-PREV28-地宫取宝
先自己用dp解了一遍,然后看了官方讲解视频是用记忆化搜索做的。感觉那位老师的方法比较容易实现(效率上和我的差不多的);记录一下三种方法。
- 动态规划
地宫取宝 1.195KB C++ 正确 100 15ms 1.113MB #include "bits/stdc++.h"
using namespace std;
const int MOD = ;
// mp是地宫地图,table[i][j]表示从坐标(1, 1)走到(i, j)的方案数
int mp[][], table[][];
// dp[i][j][k]表示在坐标(i, j)手中有k件物品的方案数
int dp[][][];
int main() {
int n, m, k;
scanf("%d%d%d", &n, &m, &k);
table[][] = ;
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
if (i != || j != )
table[i][j] = table[i - ][j] + table[i][j - ];
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", &mp[i][j]);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++) {
dp[i][j][] = table[i][j];
for (int x = i; x <= n; x++)
for (int y = j; y <= m; y++) {
// dp[x][y][z]是从dp[i][j][z - 1]推出来的;
// 要乘(i, j)到(x, y)的方案数; 把(i, j)看做(1, 1)就相当于乘table[x - i + 1][y - j + 1]
for (int z = ; z <= k; z++)
if (mp[x][y] > mp[i][j])
dp[x][y][z] = (dp[x][y][z] + dp[i][j][z - ] * 1LL * table[x - i + ][y - j + ]) % MOD ;
}
}
int res = ;
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
res = (res + dp[i][j][k] * 1LL * table[n - i + ][m - j + ]) % MOD;
printf("%d\n", res);
return ;
} - 深度优先搜索
地宫取宝 734B C++ 运行超时 42 运行超时 952.0KB #include "bits/stdc++.h"
using namespace std;
const int MOD = ;
int mp[][];
int n, m, k;
int dfs(int x, int y, int mx, int cnt) {
if (x > n || y > m || cnt > k) {
return ;
}
if (x == n && y == m) {
if (cnt == k || (cnt == k - && mx < mp[x][y])) {
return ;
}
return ;
}
int res = ;
if (mp[x][y] > mx) {
res = (res + dfs(x + , y, mp[x][y], cnt + )) % MOD;
res = (res + dfs(x, y + , mp[x][y], cnt + )) % MOD;
}
res = (res + dfs(x + , y, mx, cnt)) % MOD;
res = (res + dfs(x, y + , mx, cnt)) % MOD;
return res;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", &mp[i][j]);
printf("%d\n", dfs(, , -, ));
return ;
}七组数据过了三组
- 记忆化搜索
地宫取宝 0.995KB C++ 正确 100 0ms 3.535MB #include "bits/stdc++.h"
using namespace std;
const int MOD = ;
int mp[][];
int dp[][][][];
int n, m, k;
int dfs(int x, int y, int mx, int cnt) {
if (x > n || y > m || cnt > k) {
return ;
}
// 因为mx可能为-1,所以这里mx + 1,后面的mx + 1也是一样
if (dp[x][y][mx + ][cnt] != -) {
return dp[x][y][mx + ][cnt];
}
if (x == n && y == m) {
if (cnt == k || (cnt == k - && mx < mp[x][y])) {
dp[x][y][mx + ][cnt] = ;
return ;
}
dp[x][y][mx + ][cnt] = ;
return ;
}
int res = ;
if (mp[x][y] > mx) {
res = (res + dfs(x + , y, mp[x][y], cnt + )) % MOD;
res = (res + dfs(x, y + , mp[x][y], cnt + )) % MOD;
}
res = (res + dfs(x + , y, mx, cnt)) % MOD;
res = (res + dfs(x, y + , mx, cnt)) % MOD;
dp[x][y][mx + ][cnt] = res;
return res;
}
int main() {
scanf("%d%d%d", &n, &m, &k);
for (int i = ; i <= n; i++)
for (int j = ; j <= m; j++)
scanf("%d", &mp[i][j]);
memset(dp, -, sizeof(dp));
printf("%d\n", dfs(, , -, ));
return ;
}
蓝桥杯-PREV28-地宫取宝的更多相关文章
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)
链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...
- 地宫取宝|2014年蓝桥杯B组题解析第九题-fishers
地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角 ...
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件 ...
- 算法笔记_174:历届试题 地宫取宝(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...
- 蓝桥杯---地宫取宝(记忆搜索=搜索+dp)
题目网址:http://lx.lanqiao.org/problem.page?gpid=T120 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值 ...
- Java实现 蓝桥杯 历届试题 地宫取宝
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 第五届蓝桥杯C++B组 地宫取宝
代码: #include <bits/stdc++.h> using namespace std; #define ll long long const ll mod = 1e9 + 7; ...
随机推荐
- opencv显示图像
使用imshow函数 imshow函数功能 imshow的函数功能也非常简单,名称也可以看出来,image show的缩写.imshow负责的就是将图片显示在窗口中,通过设备屏幕展现出来.与imrea ...
- (函数)P1217 [USACO1.5]回文质数 Prime Palindromes
题解: 第一次: 算法复杂度过高,导致编译超时,需要优化 #include<stdio.h>#include<math.h>int a[100000001] = { 0 };i ...
- [CISCN2019 华北赛区 Day1 Web1]Dropbox-phar文件能够上传到服务器端实现任意文件读取
0x00知识点 phar是什么: 我们先来了解一下流包装 大多数PHP文件操作允许使用各种URL协议去访问文件路径:如data://,zlib://或php://.例如常见的 include('php ...
- Java final 关键字的用法以及原理(7)
/* final : 最终.作为一个修饰符, 1:可以修饰类,函数,变量. 2:被final修饰的类不可以被继承.为了避免被继承,被子类复写功能. 3:被final修饰的方法不可以被复写. 4:被fi ...
- ArrayList集合存储VO封装对象后调用的问题
VO代码: public class VO4Blog { private int b_id; private int b_typeid; private String b_title; private ...
- 吴裕雄--天生自然Linux操作系统:Linux 忘记密码解决方法
忘记Linux系统的root密码,linux系统忘记root密码的情况该怎么办呢?重新安装系统吗?当然不用!进入单用户模式更改一下root密码即可. 步骤如下: 重启linux系统 3 秒之内要按一下 ...
- LNMP应用
1.LNMP架构概述 LNMP就是Linux+Nginx+MySQL+PHP Linux作为服务器的操作系统 Nginx作为Web服务器 PHP作为解析动态脚本语言 MySQL即为数据库 Nginx服 ...
- Java static特性
static 表示是静态的 特点是:可以用类直接访问. 属于类, 在类加载时就有 因此static方法不能访问成员的 但是成员的可以访问静态的 所有对象可以共享. 因此常常用作工具,比如Math.PI ...
- http协议笔记(不全)
1.URL 统一资源定位系统 URL由三部分组成:资源类型.存放资源的主机域名.资源文件名.url是统一资源定位符,对可以从互联网上得到的资源的位置和访问方法的一种简洁的表示,是互联网上标准资源的地址 ...
- JavaSE--【转】网络安全之证书、密钥、密钥库等名词解释
转载 http://www.cnblogs.com/alanfang/p/5600449.html 那些证书相关的名词解释(SSL,X.509,PEM,DER,CRT,CER,KEY,CSR,P12等 ...