蓝桥杯 算法提高 ADV-1163 网格贪吃蛇 python AC

关键字:dp

简简单单,二维dp,直接第一版👇

m, n = map(int, input().split())
k = int(input())
ll = [tuple(map(int, input().split())) for _ in range(k)]
dp = [[0] * (n + 1) for _ in range(m + 1)]
for i in range(1, m + 1):
    for j in range(1, n + 1):
        dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]) + 1 if (i - 1, j - 1) in ll else max(dp[i - 1][j], dp[i][j - 1])
print(dp[m][n])

好,超时+超内存

欸那就把保存点集的list改成set吧,时间上查找效率能提高很多

每一次对行遍历的时候好像只需要下面一行,那就可以只开一维dp,在遍历的时候直接覆盖上一层内容,内存直接缩小10^6倍~

第二版👇

m, n = map(int, input().split())
k = int(input())
ll = {tuple(map(int, input().split())) for _ in range(k)}
dp = [0] * (n + 1)
for i in range(1, m + 1):
    for j in range(1, n + 1):
        dp[j] = max(dp[j], dp[j - 1]) + 1 if (i - 1, j - 1) in ll else max(dp[j], dp[j - 1])
print(dp[n])

欸36分变63分,还是超时,内存倒是不超了,但是连测试点7都跑了两秒多(就当它数据量是递增的),想不出怎么优化了。。

搜!

学到个新词:离散化

大致就是把所有点压缩来缩小dp数组的范围,避免了很多空的dp数组,原dp范围是10^6^2,确实要超时,因为本题中x轴和y轴是递增dp的,所以可以离散化,把所有点xy轴保存起来,然后排个序,从小到大,按索引作为键、坐标作为值建一个字典来查找,这时dp范围就只剩下一维的len(sort)^2了

最终版👇

m, n = map(int, input().split())
k = int(input())
sort = set()
points = set()
for _ in range(k):
    a, b = map(int, input().split())
    points.add((a, b))
    sort.add(a)
    sort.add(b)
sort = sorted(sort)
find = {i: j for i, j in enumerate(sort)}
dp = [0] * (len(sort) + 1)
for i in range(1, len(sort) + 1):
    for j in range(1, len(sort) + 1):
        dp[j] = max(dp[j], dp[j - 1]) + 1 if (find[i - 1], find[j - 1]) in points else max(dp[j], dp[j - 1])
print(dp[-1])

相关推荐

  1. 算法提高 ADV-1163 网格贪吃 python AC

    2024-05-10 23:10:02       36 阅读
  2. 算法提高 ADV-1164 和谐宿舍 python AC

    2024-05-10 23:10:02       28 阅读
  3. 算法提高 ADV-1169 区间覆盖问题 python AC

    2024-05-10 23:10:02       33 阅读
  4. 算法提高 ADV-1175 打包 python AC

    2024-05-10 23:10:02       36 阅读
  5. C语言-算法提高VIP-产生数

    2024-05-10 23:10:02       61 阅读
  6. 贪心+

    2024-05-10 23:10:02       65 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-10 23:10:02       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-10 23:10:02       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-10 23:10:02       87 阅读
  4. Python语言-面向对象

    2024-05-10 23:10:02       96 阅读

热门阅读

  1. 哪里可以获得正规的行政区底图?

    2024-05-10 23:10:02       32 阅读
  2. MySQL VARCHAR 最佳长度评估实践

    2024-05-10 23:10:02       29 阅读
  3. XXL-Job

    2024-05-10 23:10:02       30 阅读
  4. ArrayList线程不安全的情况

    2024-05-10 23:10:02       36 阅读
  5. 计算机系统基础知识

    2024-05-10 23:10:02       34 阅读