dijk|tire+floyd+dp %

算法 数学归纳+反证的角度 推理总结的思路

lc2575

% 步步取模 实现整数拆分

class Solution {

public:

vector<int> divisibilityArray(string word, int m) {

vector<int> ans(word.length());

long long x = 0;

for (int i = 0; i < word.length(); i++) {

++x = (x * 10 + (wordi - '0')) % m;++

ansi = x == 0;

}

return ans;

}

};

lc2577

dijk 单源最短路 一开始只有一个起点 不可有负数

pq贪心更新 一步一步的取出 确定 选择

class Solution {

static constexpr int dirs42 = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

public:

int minimumTime(vector<vector<int>> &grid) {

int m = grid.size(), n = grid0.size();

if (grid01 > 1 && grid10 > 1) // 无法「等待」

return -1;

int dismn;

memset(dis, 0x3f, sizeof(dis));

dis00 = 0;

priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>, greater<>> pq;

pq.emplace(0, 0, 0);

for (;;) { // 可以等待,就一定可以到达终点

autod, i, j = pq.top();

pq.pop();

if (d > disij) continue;

if (i == m - 1 && j == n - 1)

// 找到终点,此时 d 一定是最短路

return d;

for (auto &q : dirs) {

// 枚举周围四个格子

int x = i + q0, y = j + q1;

if (0 <= x && x < m && 0 <= y && y < n) {

int nd = max(d + 1, gridxy);

nd += (nd - x - y) % 2;

// nd 必须和 x+y 同奇偶

++if (nd < disxy) {
disxy = nd;
++ // 更新最短路

pq.emplace(nd, x, y);

}

}

}

}

}

};

floyd 多源最短路

一种 选/不选 的dp思想

class Solution {

public:

int findTheCity(int n, vector<vector<int>>& edges, int distanceThreshold) {

vector w(n, vector<int>(n, INT_MAX / 2)); // 防止加法溢出

for (auto& e: edges) {

int x = e0, y = e1, wt = e2;

wxy = wyx = wt;

}

vector memo(n, vector(n, vector<int>(n)));

auto dfs = \&(this auto&& dfs, int k, int i, int j) -> int {

if (k < 0) { // 递归边界

return wij;

}

auto& res = memokij; // 注意这里是引用

if (res) { // 之前计算过

return res;

}

return res = min(dfs(k - 1, i, j), dfs(k - 1, i, k) + dfs(k - 1, k, j));

};

int ans = 0;

int min_cnt = n;

for (int i = 0; i < n; i++) {

int cnt = 0;

for (int j = 0; j < n; j++) {

if (j != i && dfs(n - 1, i, j) <= distanceThreshold) {

cnt++;

}

}

if (cnt <= min_cnt) { // 相等时取最大的 i

min_cnt = cnt;

ans = i;

}

}

return ans;

}

};

lc2977

tire+floyd+dp

题解

struct Node {

Node* son26{};

int sid = -1; // 字符串的编号

};

class Solution {

public:

long long minimumCost(string source, string target, vector<string>& original, vector<string>& changed, vector<int>& cost) {

Node* root = new Node();

int sid = 0;

auto put = \&(string& s) -> int {

Node* o = root;

for (char b: s) {

int i = b - 'a';

if (o->soni == nullptr) {

o->soni = new Node();

}

o = o->soni;

}

if (o->sid < 0) {

o->sid = sid++;

}

return o->sid;

};

// 初始化距离矩阵

int m = cost.size();

vector dis(m * 2, vector<int>(m * 2, INT_MAX / 2));

for (int i = 0; i < m * 2; i++) {

disii = 0;

}

for (int i = 0; i < m; i++) {

int x = put(originali);

int y = put(changedi);

disxy = min(disxy, costi);

}

// Floyd 求任意两点最短路

for (int k = 0; k < sid; k++) {

for (int i = 0; i < sid; i++) {

if (disik == INT_MAX / 2) { // 加上这句话,巨大优化!

continue;

}

for (int j = 0; j < sid; j++) {

disij = min(disij, disik + diskj);

}

}

}

int n = source.size();

vector<long long> f(n + 1);

for (int i = n - 1; i >= 0; i--) {

// 不修改 sourcei

fi = sourcei == targeti ? fi + 1 : LONG_LONG_MAX / 2;

Node* p = root;

Node* q = root;

for (int j = i; j < n; j++) {

p = p->sonsource\[j - 'a'];

q = q->sontarget\[j - 'a'];

if (p == nullptr || q == nullptr) {

break;

}

if (p->sid < 0 || q->sid < 0) {

continue;

}

// 修改从 i 到 j 的这一段

int d = disp-\>sidq-\>sid;

if (d < INT_MAX / 2) {

fi = min(fi, disp-\>sidq-\>sid + fj + 1);

}

}

}

return f0 < LONG_LONG_MAX / 2 ? f0 : -1;

}

};

相关推荐
huohaiyu24 分钟前
深入解析Java垃圾回收机制
java·开发语言·算法·gc
浮芷.31 分钟前
鸿蒙PC端 TTS 并发调用问题详解:资源竞争与队列管理
算法·华为·开源·harmonyos·鸿蒙·鸿蒙系统
装不满的克莱因瓶39 分钟前
掌握感知器的学习原理
人工智能·python·神经网络·算法·ai·卷积神经网络
Lsk_Smion40 分钟前
力扣实训 _ [994].腐烂的橘子/图论
算法·leetcode·图论
轻微的风格艾丝凡1 小时前
两电平三相VSC整流模式从不控整流平滑切换至有源整流调试记录
算法·dsp·c2000
dongf20191 小时前
R语言KNN算法
算法·数据分析·r语言
小O的算法实验室1 小时前
2025年IEEE TASE,基于双层耦合平均场博弈的大规模智能体集成任务分配与轨迹规划
人工智能·算法·机器学习
8Qi81 小时前
LeetCode 337:打家劫舍 III(House Robber III)—— 题解 ✅
算法·leetcode·二叉树·动态规划
地平线开发者1 小时前
从 INT64 Div 算子约束到 Cast 修复全流程
算法
AI科技星2 小时前
基于奇合数边界的离散解析数论与双螺旋宇宙本体大统一体系论文全部数学公式汇总表
人工智能·算法·机器学习·架构·学习方法