T266691 对布满灰尘的西洋棋宣告将军

这篇博客介绍了如何使用动态规划(DP)解决一道关于在二维棋盘上找到从左上角到右下角的最大路径权值和路径数的问题。博主分享了80分和100分的C++代码实现,并提到关键在于正确处理路径数的更新。在错误的代码中,博主没有初始化数组f,导致丢失了20分。
摘要由CSDN通过智能技术生成

觉得写这道()题题解的人挺少的,那我就来发一篇c++的吧

首先题目描述:

布洛瓦侯爵想利用维多利加来占卜二战的局势。侯爵只给了她一盘西洋棋和 许多书,便将她关在了王宫的地牢。 

西洋棋盘可以看成一个 N * M 的网格。西洋棋可以摆放在任何一个格子里, 而不是网格线的交叉点上。 

维多利加将一个棋子放在了左上角的格子上。她试着移动这个棋子,棋子只 会向右或者向下移动。 

每个格子有一个权值,维多利加想知道,从左上角到右下角的所有路径中: 

1. 经过的格子的权值和最大是多少? 
2. 权值和最大的路径一共有多少条?

输入格式

第一行两个整数 N,M。 

接下来 N 行,每行 M 个整数,表示每个格子的权值。

输出格式

输出两行,

第一行表示最大权值和,

第二行表示权值和最大的路径数除以 1e9+7 的余数。

样例 #1

样例输入 #1

3 3 
1 1 1 
1 2 1 
1 1 1

样例输出 #1

6
4

提示

Ai,j 表示第 i 行第 j 列格子的权值。 

30%的数据保证,N≤5,M≤5。 

60%的数据保证,N≤100,M≤100。 

另有 20%的数据保证,对于任意的 i 和 j,Ai,j = 1。 

100%的数据保证,N≤2000,M≤2000,|Ai,j|≤10^9。



一道DP题</

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值