目录

题目

思路

Code


题目

小华按照地图去寻宝,地图上被划分成 m 行和 n 列的方格,横纵坐标范围分别是[0,n-1] 和[0,m-1]。在横坐标和纵坐标的数位之和不大于k 的方格中存在黄金(每个方格中仅存在一克黄金),但。小华从入口(0,0) 进入,任何时候只能向左,右,上,下四个方向移动一格。请问小华最多能获得多少克黄金?
输入描述
坐标取值范围如下
0<=m<=50
0<=n<=50
k 的取值范围如下
0<=k<=100
输入中包含3个字数,分别是m,n,k

输出描述
输出小华最多能获得多少克黄金

示例1:

输入:
40 40 18

输出:
1484

示例2:

输入:
5 4 7

输出:
20
 

思路

1:相当简单的一道DFS、BFS类型题目,只要在遍历的过程中,注意【横坐标和纵坐标的数位之和不大于k 的方格】这个条件即可。

编辑

Code

# coding:utf-8
#JSRUN引擎2.0,支持多达30种语言在线运行,全仿真在线交互输入输出。 
import functools
import sys
from collections import Counter, defaultdict
import copy
from itertools import permutations
import re
import math
import sys
from queue import Queue
sys.setrecursionlimit(20000)


def dfs(x, y, m, n, k) :
    global visited
    if (x < 0 or y < 0 or x >= m or y >= n) :
        return 0
    if (visited[x][y]==1) :
        return 0 
    total_num = 0
    xx = copy.deepcopy(x)
    yy = copy.deepcopy(y)
    while (xx > 0) :
        total_num += xx % 10 
        xx //= 10
    while (yy > 0) :
        total_num += yy % 10 
        yy //= 10  
    if(total_num>k):
        return 0
    

    visited[x][y] = 1 

    result = 1
    if(x+1 <=m):
        result += dfs(x + 1, y, m,n,k)
    
    if(x-1 >=0):
        result += dfs(x - 1, y, m,n,k)
    
    if(y+1 <=n):
        result += dfs(x,y+1, m,n,k)
    
    if(y-1 >=0):
        result += dfs(x, y-1, m,n,k)
    return result

print(dfs(0, 0, m,n,k))


【华为od机试真题Python+JS+Java合集】【超值优惠】:Py/JS/Java合集

【华为od机试真题Python】:Python真题题库

【华为od机试真题JavaScript】:JavaScript真题题库

【华为od机试真题Java】:Java真题题库

【华为od机试真题C++】:C++真题题库

【华为od机试真题C语言】:C语言真题题库

【华为od面试手撕代码题库】:面试手撕代码题库

【华为od机试面试交流群:830285880】