当前位置: 首页 > article >正文

【python练习】在棋盘上收集奖品,跟着书本理思路

在棋盘上收集奖品


Description

在棋盘上收集奖品。假设有一个m x n的棋盘,每个格子里有一个奖品(每个奖品的价值在10到1000之间),现在要求从左上角开始到右下角结束,每次只能往右或往下走一个格子,所经过的格子里的奖品归自己所有。问最多能收集价值多少的奖品。

图片1.png


Input
第一行:m n(5<=m,n<=14),后面m行,每行n个整数(10,1000之间)。


Output
整数


Sample Input 1 

6 6
364 674 305 122 756 593
178 326 451 678 118 607
692 401 952 898 878 509
348 755 820 828 896 771
532 247 233 480 880 226
240 620 913 797 236 834
Sample Output 1

7389
Source

中学生可以这样学Python,P188例8-20

当m=1 n=3,一行一列时候,print(f(qipan,0,2))
a=0 不符合if条件,返回f(qipan,-1,2)和f(qipan,0,1)的最大值+qipan[0][2]
f(qipan,-1,2) 符合if条件,返回0,肯定比f(qipan,0,1)小
现在是f(qipan,0,1)+qipan[0][2]
f(qipan,0,1)不符合if条件,返回f(qipan,-1,1)和f(qipan,0,0)的最大值+qipan[0][1]
f(qipan,-1,1)符合if条件,返回0,肯定比f(qipan,0,0)小
现在是f(qipan,0,0)+qipan[0][1]
f(qipan,0,0)不符合if条件,返回f(qipan,-1,0)和f(qipan,0,-1)的最大值+qipan[0][0]
f(qipan,-1,0)和f(qipan,0,-1)符合if条件,返回0
结论:一行三列就是0+qipan[0][0]+qipan[0][1]+qipan[0][2]

m,n=map(int,input().split())
qipan=[]
for i in range(m):
    line=list(map(int,input().split()))
    qipan.append(line)
#print(qipan)

def f(qipan,a,b):
    if a<0 or b<0:
        return 0
    else:
        return max(f(qipan,a-1,b),f(qipan,a,b-1))+qipan[a][b]
print(f(qipan,m-1,n-1))


http://www.kler.cn/news/108123.html

相关文章:

  • 2-Java进阶知识总结-6-多线程
  • shell脚本的编写(输入、输出、变量、数组等的使用规范及实例)
  • 【鸿蒙软件开发】ArkTS基础组件之TextClock(时间显示文本)、TextPicker(滑动选择文本)
  • 手写RPC框架
  • 网络安全(黑客)—小白自学
  • JavaScript的字符串介绍
  • Python 编写 Flink 应用程序经验记录(Flink1.17.1)
  • LuatOS-SOC接口文档(air780E)--max30102 - 心率模块
  • Geeker-Admin中ProTable表格分页之自定义接口页码、尺寸参数
  • MySQL -- 表的约束
  • Python通过ldap3操作LDAP账号
  • Java零基础入门-位运算符
  • How to install mongodb-7.0 as systemd service with podman
  • JVM面试知识点整理
  • PG数据库基本使用
  • 从Mysql架构看一条查询sql的执行过程
  • use renv with this project create a git repository
  • 分类预测 | MATLAB实现SSA-CNN-BiGRU麻雀算法优化卷积双向门控循环单元数据分类预测
  • 【软件安装环境配置】vscode 安装界面没有出现安装路径的选择 的解决,以及vscode的删除的问题
  • 【算法|动态规划No.32 | 完全背包问题】完全背包模板题
  • DAY05 循环嵌套+函数的笔记整理
  • 前端 : 用HTML ,CSS ,JS 做一个点名器
  • 【知识串联】概率论中的值和量(随机变量/数字特征/参数估计)【考研向】【按概率论学习章节总结】(最大似然估计量和最大似然估计值的区别)
  • C++之左值、右值、std::forward、std::move总结(二百五十)
  • 多线程---wait和notify
  • 闭包和函数柯里化的理解
  • 测开 (Junit 单元测试框架)
  • 【C++】模版进阶
  • UE4/UE5 设置widget中text的字体Outline
  • docker 中给命令起别名