首页 > 其他分享 >力扣周赛394之别样DP + 别样Dijkstra

力扣周赛394之别样DP + 别样Dijkstra

时间:2024-04-21 22:45:58浏览次数:27  
标签:pre 周赛 题目 10 力扣 range 别样 dp dis

别样DP

题目链接

https://leetcode.cn/problems/minimum-number-of-operations-to-satisfy-conditions/description/

题目大意

image

题目思路

  • 需要考虑m列每一列填什么的情况,因为最终每一列都是一样的
  • 考虑暴力,每一列都可以变成 0-9 有 \(10^m\) 次种情况,这必然是不可行的
  • 我们从前往后看,后一列的情况不会影响前一列的情况
  • dp应运而生,dp[i][x]表示第i列都变成x需要的最少操作数
  • dp[i][x] = dp[i - 1][y] + n - cnt[x] 【其中 x != y】

题目代码

class Solution:
    def minimumOperations(self, grid: List[List[int]]) -> int:
        n,m = len(grid),len(grid[0])
        ans = 0
        cols = [[0 for _ in range(10)] for _ in range(m)]
        for j in range(m):
            for i in range(n):
                x = grid[i][j]
                cols[j][x] += 1
        dp = [[inf for _ in range(10)] for _ in range(m)]
        for x in range(10):
            dp[0][x] = n - cols[0][x]

        for i in range(1,m):
            for x in range(10):
                for y in range(10):
                    if x != y:
                        dp[i][y] = min(dp[i][y],dp[i - 1][x] + n - cols[i][y])
        return min(dp[-1])

别样Dijkstra

题目链接

https://leetcode.cn/problems/find-edges-in-shortest-paths/description/

题目大意

image

题目思路

设pre[v]表示最短路中可以转移到v的节点,且是u-v一定是最短路上的边!

  • 考虑状态转移的情况
  • ①dis[v] > dis[u] + w 【dis[v] = dis[u] + w】【v的最短距离被u更新】,所以pre[v] = [u]
  • ②dis[v] = dis[u] + w 增加了一个可以转移到v的节点u, pre[v].append(u)

题目代码

class Solution:
    def findAnswer(self, n: int, edges: List[List[int]]) -> List[bool]:
        ans = [False]  * len(edges)
        g = [[]for _ in range(n + 1)]
        for u,v,w in edges:
            g[u].append([v,w])
            g[v].append([u,w])
        dis = [inf] * n
        dis[0] = 0
        heap = [(0,0)]
        pre = [[]for _ in range(n)]
        while heap:
            d,u = heappop(heap)
            if d > dis[u]:
                continue
            for v,w in g[u]:
                if dis[v] > d + w:
                    dis[v] = d + w
                    heappush(heap,(d + w,v))
                    pre[v] = [u]
                elif dis[v] == d + w:
                    pre[v].append(u)
        s = set()
        def dfs(v):
            for u in pre[v]:
                s.add((u,v))
                dfs(u)
        dfs(n - 1)
        for i,(u,v,_) in enumerate(edges):
            if (u,v) in s or (v,u) in s:
                ans[i] = True
        return ans

标签:pre,周赛,题目,10,力扣,range,别样,dp,dis
From: https://www.cnblogs.com/gebeng/p/18149656

相关文章

  • [leetcode 周赛] 100276. 最短路径中的边
    solution使用dijkstra算法求出顶点0到每个顶点的最小距离dp[i]然后再从n-1开始遍历,如果dp[to]+w==dp[from],这条边符合条件importjava.util.*;classSolution{publicstaticvoidmain(String[]args){Solutionsolution=newSolution();......
  • 牛客周赛 Round 40
    A小红进地下城点击查看代码#include<bits/stdc++.h>usingnamespacestd;intmain(){ strings,t; cin>>s; cin>>t; if(s==t) { cout<<"Yes"<<endl; } else { cout<<"No"<<endl; } return0;}B小......
  • 2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。 游戏
    2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡泡,但需要满足以下规则:被击破的节点泡泡最多只能有一个子节点泡泡。如果被击破的节点......
  • 力扣经典150题第十六题:接雨水
    目录力扣经典150题第十六题:接雨水1.题目描述2.问题分析3.解题思路4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十六题:接雨水1.题目描述给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少......
  • 力扣经典150题第十五题:分发糖果
    目录力扣经典150题第十五题:分发糖果1.题目描述2.问题分析3.解题思路4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十五题:分发糖果1.题目描述n个孩子站成一排。给你一个整数数组ratings表示每个孩子的评分。你需要按照以下......
  • 2024.4.11力扣每日一题——互质树
    2024.4.11题目来源我的题解方法一深度优先遍历+回溯+存储父节点方法二官方深度优先遍历题目来源力扣每日一题;题序:1766我的题解方法一深度优先遍历+回溯+存储父节点使用一个List存储深度优先遍历过程中的父节点,然后从List的右侧开始遍历,直到与当前节点互质......
  • 从理论到实践:01背包问题在分割等和子集中的应用(力扣416)
    文章目录题目题解一、思路二、解题方法三、Code总结在昨天的文章(传送门)中,我们从理论对01背包问题进行了基础详细的讲解,从二维数组到一维数组进行优化,今天我们用实际题目来运用一下01背包问题的动态规划,要使用01背包问题中的一维dp数组解题,如果对这个不清楚的话,可以......
  • 力扣78 子集 Java版本
    文章目录题目描述代码注意题目描述给你一个整数数组nums,数组中的元素互不相同。返回该数组所有可能的子集(幂集)。解集不能包含重复的子集。你可以按任意顺序返回解集。示例1:输入:nums=[1,2,3]输出:[[],[1],[2],[1,2],[3],[1,3],[2,3],[1,2,3]]示例2......
  • 力扣51 N皇后 Java版本
    文章目录题目描述代码题目描述按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。n皇后问题研究的是如何将n个皇后放置在n×n的棋盘上,并且使皇后彼此之间不能相互攻击。给你一个整数n,返回所有不同的n皇后问题的解决方案。每......
  • 力扣经典150题第十三题:除自身以外数组的乘积
    目录力扣经典150题第十三题:除自身以外数组的乘积1.简介2.问题分析3.解题思路方法一:左右乘积列表方法二:优化空间复杂度4.代码实现5.时间复杂度分析6.应用和扩展7.总结8.参考资料力扣经典150题第十三题:除自身以外数组的乘积1.简介本文介绍如何设计一个算......