360笔试
选择题真难,麻了,覆盖面过于广,不太会
第二题。用一下别人的图说明题目,也ac了,也简单 就是在最大正方形基础上在计算面积 找最大就行(为啥可以,因为我们默认了大正方形一定是涵盖了小正方形的,反正计算面积时时每一个点依次算的)

#校招##秋招#
编程倒是挺简单,一题贪心,一题最大正方形变种
第一题魔塔通关求最打分数,其实就是排序(先按是否有宝物升序,然后已关卡得分降序),很简单的逻辑。符合正常人思维
n= int(input()) arr = [] for i in range(n): temp = list(map(int,input().split(" "))) arr.append(temp) arr.sort(key = lambda x: (x[1],-x[0])) ans=0 for i in range(n): if arr[i][1]==0: ans += arr[i][0] else: if ans > arr[i][0]: ans *=2 else: ans += arr[i][0] print(ans)
第二题。用一下别人的图说明题目,也ac了,也简单 就是在最大正方形基础上在计算面积 找最大就行(为啥可以,因为我们默认了大正方形一定是涵盖了小正方形的,反正计算面积时时每一个点依次算的)
def helper(arr,n,m): # 标准的最大正方形,一样的代码求dp dp = [[0]*m for _ in range(n)] for i in range(n): for j in range(m): if arr[i][j] !=-1: if i==0 or j==0: dp[i][j] = 1 else: dp[i][j] = min(dp[i-1][j],dp[i-1][j-1],dp[i][j-1])+1 return dp def caculate_area(arr,x,y,length): # 有了右下角坐标和边长,求面积不是手到擒来 area = 0 for i in range(length): area += sum(arr[x-i][y-length+1:y+1]) return area def helper2(arr,dp,n,m): # dp每个位置都计算面积,找最大 res = 0 for i in range(n): for j in range(m): if dp[i][j]!= 0: res = max(res,caculate_area(arr,i,j,dp[i][j])) return res T = int(input()) for i in range(T): n,m= list(map(int,input().split())) arr =[] for _ in range(n): temp = list(map(int, input().split(" "))) arr.append(temp) dp = helper(arr,n,m) res = helper2(arr, dp, n, m) print(res)