← 返回博客

Blog Detail

2026-07-21 洛谷刷题记录

2026-07-21 · 洛谷刷题 · 洛谷 · 算法

今日概览

今天记录了 1 道题。

题号题目状态语言标签
P1359租用游艇ACPython动态规划、最短路

刷题记录

P1359 租用游艇

  • 题目:租用游艇
  • 状态:AC
  • 语言:Python
  • 标签:动态规划、最短路

题目原文

题目描述

长江游艇俱乐部在长江上设置了 nn 个游艇出租站 1,2,,n1,2,\dots,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 ii 到游艇出租站 jj 之间的租金为 ri,jr_{i,j}1i<jn1\le i\lt j\le n)。试设计一个算法,计算出从游艇出租站 11 到游艇出租站 nn 所需的最少租金。

输入格式

第一行中有一个正整数 nn,表示有 nn 个游艇出租站。接下来的 n1n-1 行是一个半矩阵 ri,jr_{i,j}($1\le i

输出格式

输出计算出的从游艇出租站 11 到游艇出租站 nn 所需的最少租金。

说明/提示

1n2001\le n\le 200,保证计算过程中任何时刻数值都不超过 10610^6

代码

n = int(input())
graph = [[0]*(n+1) for _ in range(n+1)]
for i in range(1,n):
     nlist = list(map(int,input().split()))
     j = n
     while j>i:
          num = nlist.pop()
          graph[i][j] = num
          graph[j][i] = num
          j-=1
          
memo = {}
def min_rent(graph,i):
     if i == 1:
          return 0
     if i in memo:
          return memo[i]
     rent = min(
          (min_rent(graph,j) + graph[j][i]) for j in range(1,i)
     )

     memo[i] = rent
    
     return rent

print(min_rent(graph,n))