完美世界笔试
机器学习岗,选择题全是C和爪哇😥。
编程题都是动态规划
import sys n = int(sys.stdin.readline().strip()) m = int(sys.stdin.readline().strip()) arr = list(map(int, sys.stdin.readline().strip().split(" "))) res = [[0] * m for _ in range(n)] c = 0 for i in range(n): for j in range(m): res[i][j] = arr[c] c += 1 class Solution: def calculateMinimumHP(self, dungeon): rows = len(dungeon) cols = len(dungeon[0]) dp = [[0] * cols for _ in range(rows)] # 初始化,最右下角的血量。至少为1,并且若有损失,还需要增加 dp[-1][-1] = max(1,1 - dungeon[-1][-1]) for i in range(cols-2, -1, -1): # 只能朝右侧走 dp[rows-1][i] = max(1, dp[-1][i+1] - dungeon[-1][i]) for i in range(rows-2, -1, -1): dp[i][cols-1] = max(1, dp[i+1][-1] - dungeon[i][-1]) for i in range(rows-2, -1, -1): for j in range(cols-2, -1, -1): dp[i][j] = max(1, min(dp[i+1][j], dp[i][j+1]) - dungeon[i][j]) return dp[0][0] print(Solution().calculateMinimumHP(res))
钱用最少不同金额的硬币组成,求最少的个数。第一个方法,没考虑边界,超时80%,第二AC
n = int(sys.stdin.readline().strip()) arr = list(map(int, sys.stdin.readline().strip().split(" "))) money = int(sys.stdin.readline().strip()) class Solution: def getLeastquan(self, money, arr, n): if min(arr) > money: return -1 if money in arr: return 1 min_count = money for i in range(n): count_num = self.getLeastquan(money - arr[i], arr, n) + 1 if count_num < min_count: min_count = count_num return min_count def getLeastCoins(self, money, arr, n): dicts = {} if min(arr) > money: return -1 dicts = {0:0} for i in range(1, money+1): dicts[i] = money + 1 for j in arr: if j <= i: dicts[i] = min(dicts[i], dicts[i-j] + 1) if dicts[money] == money + 1: return -1 else: return dicts[money] # print(Solution().getLeastquan(money, arr, n)) print(Solution().getLeastCoins(money, arr, n))