算法97:成绩排名---动态规划
思路:动态规划
代码:
i , j , total = 0,0,0 n = int(input()) dp = [1] * n for i in range(1,n): dp[i] = 0 for i in range(2,n+1): for j in range(i-1,0,-1): dp[j] = (j+1) * (dp[j-1] + dp[j]) for j in range(0,n): total += dp[j] print(total)
思路:
链接:https://www.nowcoder.com/questionTerminal/3e483fe3c0bb447bb17ffb3eeeca78ba
来源:牛客网
dp[i[[j] 代表 index 从 i 到 j (包含 i 和 j)中的最大值
所以:
dp[i][j] = max(dp[i][k] + dp[k+1][j],dp[i][k] * dp[k+1][j])for i <=k < j
代码:
nums = list(map(int,input().strip().split())) dp = [[0]*len(nums) for i in range(len(nums))] for i in range(len(dp)-1,-1,-1): for j in range(len(dp[0])): if i == j: dp[i][j] = nums[i] else: for k in range(i,j): dp[i][j] = max([dp[i][k] + dp[k+1][j],dp[i][k] * dp[k+1][j],dp[i][j]]) # print(dp) print(dp[0][len(nums)-1])