问题 1436: 地宫取宝 (dp)
时间限制: 1Sec 内存限制: 128MB 提交: 423 解决: 94
地宫的入口在左上角,出口在右下角。
小明被带到地宫的入口,国王要求他只能向右或向下行走。
走过某个格子时,如果那个格子中的宝贝价值比小明手中任意宝贝价值都大,小明就可以拿起它(当然,也可以不拿)。
当小明走到出口时,如果他手中的宝贝恰好是k件,则这些宝贝就可以送给小明。
请你帮小明算一算,在给定的局面下,他有多少种不同的行动方案能获得这k件宝贝。
接下来有 n 行数据,每行有 m 个整数 Ci (0< =Ci< =12)代表这个格子上的宝物的价值
2 3 2
1 2 3
2 1 5
14 思路
dfs记忆化搜索,这题要考虑的参数:宝物的大小和个数
所以我们要四个参数;另外由于宝物的大小可能为0,所以要初始为
-1,则dp里面要+1;
或者用dp;dp[i][j][k][c]为走到(i,j)的时候,手上共K个物品,最大价值小于c
具体看代码。 代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=1e9+;
int n,m,kk;
ll dp[][][][];
int a[][]; ll dfs(int x,int y,int num,int c)
{
if(dp[x][y][num][c+]!=-) return dp[x][y][num][c+];
if(x==n&&y==m) {
if(num==kk) return ;
if(num==kk-&&a[x][y]>c) return ;
}
ll ans=;
if(x<n)
{
if(a[x][y]>c) ans+=(dfs(x+,y,num+,a[x][y]))%mod;
ans%=mod;
ans+=(dfs(x+,y,num,c))%mod;
ans%=mod;
}
if(y<m)
{
if(a[x][y]>c) ans+=(dfs(x,y+,num+,a[x][y]))%mod;
ans%=mod;
ans+=(dfs(x,y+,num,c))%mod;
ans%=mod;
} return dp[x][y][num][c+]=ans;
}
int main()
{
while(~scanf("%d %d %d",&n,&m,&kk))
{
memset(dp,-,sizeof(dp));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
scanf("%d",&a[i][j]);
}
}
printf("%lld\n",dfs(,,,-));//注意这里要初始为-1
}
return ;
}
dfs记忆化搜索
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define mod 1000000007
#define N 55
int n,m,kk;
int a[N][N];
ll dp[N][N][][]; int main()
{
while(~scanf("%d %d %d",&n,&m,&kk))
{
memset(a,,sizeof(a));
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
scanf("%d",&a[i][j]);
}
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
for(int k=;k<=kk;k++)
{
for(int c=;c<;c++)
{
ll na=,buna=;
if(i==&&j==){
if(!k||(k==&&c>a[i][j]))dp[i][j][k][c]=;
continue;
}
if(k&&c>a[i][j])na=dp[i-][j][k-][a[i][j]]+dp[i][j-][k-][a[i][j]];
buna=dp[i-][j][k][c]+dp[i][j-][k][c];
dp[i][j][k][c]=na+buna;
dp[i][j][k][c]%=mod;
}
}
}
}
printf("%lld\n",dp[n][m][kk][]);
}
return ;
}
dp
问题 1436: 地宫取宝 (dp)的更多相关文章
- 蓝桥杯历届试题 地宫取宝 dp or 记忆化搜索
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 2014 蓝桥杯 预赛 c/c++ 本科B组 第九题:地宫取宝(12') [ dp ]
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 锦囊1 锦囊2 锦囊3 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件 ...
- 地宫取宝|2014年蓝桥杯B组题解析第九题-fishers
地宫取宝 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
- 【蓝桥杯真题】地宫取宝(搜索->记忆化搜索详解)
链接 [蓝桥杯][2014年第五届真题]地宫取宝 题目描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被 ...
- 算法笔记_174:历届试题 地宫取宝(Java)
目录 1 问题描述 2 解决方案 1 问题描述 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明 ...
- 蓝桥杯 2014本科C++ B组 地宫取宝 DFS+记忆化搜索
历届试题 地宫取宝 时间限制:1.0s 内存限制:256.0MB 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角 ...
- 蓝桥杯---地宫取宝(记忆搜索=搜索+dp)
题目网址:http://lx.lanqiao.org/problem.page?gpid=T120 问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值 ...
- ACwing1212. 地宫取宝
题目: X 国王有一个地宫宝库,是 n×m 个格子的矩阵,每个格子放一件宝贝,每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走过某个 ...
- Java实现 蓝桥杯 历届试题 地宫取宝
问题描述 X 国王有一个地宫宝库.是 n x m 个格子的矩阵.每个格子放一件宝贝.每个宝贝贴着价值标签. 地宫的入口在左上角,出口在右下角. 小明被带到地宫的入口,国王要求他只能向右或向下行走. 走 ...
随机推荐
- 卷积神经网络 CNN 系列模型阐述
http://www.sohu.com/a/134347664_642762 Lenet,1986年 https://github.com/BVLC/caffe/blob/master/example ...
- Ubuntu apt-get install E: 无法定位软件包Ubuntu apt-get install E: 无法定位软件包
sudo cp /etc/apt/sources.list /etc/apt/sources.list-bak #先将之前的source-list备份 sudo vi /etc/apt/sources ...
- js格式化数字或者小数,加入千分符(此次为”,“)
function npChangeNum(num) { var tag = (num || 0).toString().split("."); tag[0] = tag[0].re ...
- 【leetcode】1090. Largest Values From Labels
题目如下: We have a set of items: the i-th item has value values[i] and label labels[i]. Then, we choose ...
- 对getBoundingClientRect属性的研究
1.getBoundingClientRect用于获取某个元素相对于视窗的位置集合.集合中有top, right, bottom, left等属性. .top:元素上边到视窗上边的距离; right: ...
- handy源码阅读(一):EventBase类
类EventBase继承于类EventBases,继承于noncopyable. 其中noncopyable是一个去除了拷贝构造和赋值构造的类. noncopyable: class noncopy ...
- Dubbo学习-3-管理控制台搭建
dubbo 2.6.x 的dubbo-admin管理控制台搭建 1.下载源码:https://github.com/apache/incubator-dubbo-ops 打开后切换到master分支 ...
- Jmeter的JDBC请求执行多条SQL语句
注:有mysqlconnector/j 3.1.1以上版本才支持执行多条sql语句 1. 下载jdbc驱动为了连接Mysql数据库,还需要有个jdbc驱动:mysql-connector-ja ...
- 判断逻辑 先判断协议字段返回,再判断业务返回,最后判断交易状态 API密钥
[微信支付]微信小程序支付开发者文档 https://pay.weixin.qq.com/wiki/doc/api/wxa/wxa_api.php?chapter=4_1 协议规则 商户接入微信支付, ...
- gitlab+jenkins自动化打包IOS-jenkins配置
实现的效果如图: 构建界面: 完成效果: 功能说明: 根据选择的代码分支,执行构建打包 构建成功后根据ipa/apk生成二维码,并可在历史构建列表中展示各个版本的二维码,通过手机扫描二维码可直接安装 ...