1.第一题找最优利润值,很简单直接两层循环暴力即可
class Solution:
def __init__(self) -> None:
pass
def solution(self, values):
result = 0
for i in range(0,len(values)):
for j in range(i+1,len(values)):
result=max(values[j]-values[i],result)
return result
if __name__ == "__main__":
values = [int(item) for item in input().strip().split()]
sol = Solution()
result = sol.solution(values)
print(result)
2.第二题开学趣闻之美食诱惑是一个动态规划问题,相当于是给定一个包含非负整数的 n * n 网格,然后从左上角到右下角找到一条路径,使得路径上的权值总和为最小。
题目要求是从左上角到右下角,最小路径和是多少,因此定义 dp[i] [j]的含义为:当小艺酱从左上角走到(i, j) 这个位置时,当前的最小路径和是 dp[i] [j]。要到达(i,j),有两种方式:
一种是从 (i-1, j) 这个位置走一步到达
一种是从(i, j - 1) 这个位置走一步到达
因此状态转移方程为:
dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + vector[i][j]
(vector[i][j] 表示当前网格中权值)
class Solution:
def __init__(self) -> None:
pass
def solution(self, n, vector):
result = None
dp = [[0 for i in range(n)] for j in range(n)]
dp[0][0]=vector[0][0]
for i in range(1,n):
dp[0][i] = dp[0][i-1]+vector[0][i]
dp[i][0] = dp[i-1][0]+vector[i][0]
for i in range(1,n):
for j in range(1,n):
dp[i][j] = min(dp[i-1][j],dp[i][j-1]) + vector[i][j]
return dp[-1][-1]
if __name__ == "__main__":
n = int(input().strip())
vector = []
for i in range(n):
vector.append([int(item) for item in input().strip().split()])
sol = Solution()
result = sol.solution(n, vector)
print(result)
3.用lst列表来记录每个位置为中心向两边扩展的回文长度。由于奇数和偶数情况不同,因此要分两种情况判断。
class Solution:
def __init__(self) -> None:
pass
def solution(self, s):
lst=[];j=0
for i in range(len(s)):
dt = min(i+1,len(s)-i)
flag=False
for j in range(dt):
if s[i+j] != s[i-j]:
lst.append((j-1)*2+1)
flag=True
break
if not flag:
lst.append(j*2+1)
for i in range(len(s)):
dt = min(i+1,len(s)-i+1)
flag=False
for j in range(dt):
if s[i+j-1] != s[i-j]:
lst.append((j-1)*2)
flag=True
break
if not flag:lst.append(j*2)
return max(lst)
if __name__ == "__main__":
s = input().strip()
s1 = Solution()
result = s1.solution(s)
print(result)
4.第四题感觉有点奇怪,样例过了但是其他点一直不对