【圖論】分層圖 / 拆點

大多數都是同一個套路,將圖拆開成幾個圖,每一層都對應著一個不同的狀態,比如把到點 i 的狀態拆成經過了 j 次操作所得的 xx 結果,一般數據不會很大

目前遇到的可分為 3 類:

①.給你最多 k 次操作,求 xx 結果

②.初始給你 k 個燃料,走邊需要消耗,每個點你可以選擇增加燃料或者不增加燃料,求 xx 結果

③.特殊題(還沒見過很多)


P1948 [USACO08JAN] Telephone Lines S - 洛谷

思路:

注意本題的中價值只關于最大值,所以需要改變一下模板

代碼:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());int n,m,k;
//走到 i 用了 j 次
int dis[1005][10005];vector<vector<pair<int,int>>> g(10005);void solve()
{cin >> n >> m >> k;for (int i = 0; i < m; i++){int u,v,t;cin >> u >> v >> t;g[u].emplace_back(v,t);g[v].emplace_back(u,t);}if(k >= m){cout << "0\n";return;}for (int i = 2; i <= n; i++){for (int j = 0; j <= k; j++){dis[i][j] = 1e18;}  }//時間 次數 點priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,greater<>> pq;pq.push({0,0,1});while (!pq.empty()){auto [ut,uk,u] = pq.top();pq.pop();if(dis[u][uk] < ut || u == n)continue;for(auto & [v,w] : g[u]){if(dis[v][uk] > max(dis[u][uk],w)){dis[v][uk] = max(dis[u][uk],w);pq.push({dis[v][uk],uk,v});}if(uk < k && dis[v][uk+1] > dis[u][uk]){dis[v][uk+1] = dis[u][uk];pq.push({dis[v][uk+1],uk+1,v});                }}}int ans = 1e18;for (int i = 0; i <= k; i++){ans = min(ans,dis[n][i]);}cout << (ans == 1e18 ? -1 : ans) << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}

P2939 [USACO09FEB] Revamping Trails G - 洛谷

思路:

模板直接套,改改數據范圍

代碼:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());int n,m,k;
//走到 i 用了 j 次
int dis[10005][55];vector<vector<pair<int,int>>> g(10005);void solve()
{cin >> n >> m >> k;for (int i = 0; i < m; i++){int u,v,t;cin >> u >> v >> t;g[u].emplace_back(v,t);g[v].emplace_back(u,t);}for (int i = 2; i <= n; i++){for (int j = 0; j <= k; j++){dis[i][j] = 1e18;}  }//時間 次數 點priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,greater<>> pq;pq.push({0,0,1});while (!pq.empty()){auto [ut,uk,u] = pq.top();pq.pop();if(dis[u][uk] < ut || u == n)continue;for(auto & [v,w] : g[u]){if(dis[v][uk] > dis[u][uk] + w){dis[v][uk] = dis[u][uk] + w;pq.push({dis[v][uk],uk,v});}if(uk < k && dis[v][uk+1] > dis[u][uk]){dis[v][uk+1] = dis[u][uk];pq.push({dis[v][uk+1],uk+1,v});                }}}int ans = 1e18;for (int i = 0; i <= k; i++){ans = min(ans,dis[n][i]);}cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}

P4568 [JLOI2011] 飛行路線 - 洛谷

思路:

模板本板,屬于機會固定型

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlvector<vector<pair<int, int>>> g(10005);
int vis[10005][15];
int dp[10005][15];
void solve()
{int n, m, k;cin >> n >> m >> k;int s, e;cin >> s >> e;for (int i = 0; i < m; i++){int u, v, c;cin >> u >> v >> c;g[u].emplace_back(v,c);g[v].emplace_back(u,c);}priority_queue<pair<int,pair<int, int>>,vector<pair<int, pair<int, int>>>,greater<>> q;q.push({ 0,{s,0} });//距離 節點 使用多少次 kdp[s][0] = 0;while (!q.empty()){auto t = q.top();q.pop();int now = t.second.first;int usek = t.second.second;int dis = t.first;if (vis[now][usek]){continue;}vis[now][usek] = 1;for (auto & son : g[now]){int nt = son.first;int cost = son.second;if (dp[nt][usek] > dis + cost){dp[nt][usek] = dis + cost;q.push({ dis + cost,{nt,usek } });}if (usek + 1 <= k && dp[nt][usek + 1] > dis){dp[nt][usek + 1] = dis;q.push({ dis,{ nt,usek + 1 } });}}}int ans = 1e18;for (int i = 0; i <= k; i++){ans = min(ans, dp[e][i]);}cout << ans << endl;
}
signed main()
{memset(dp, 0x3f, sizeof dp);//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

P4822 [BJWC2012] 凍結 - 洛谷

思路:

注意操作,這里是將權值減半,其余不變

代碼:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());int n,m,k;
//走到 i 用了 j 次
int dis[55][55];vector<vector<pair<int,int>>> g(55);void solve()
{cin >> n >> m >> k;for (int i = 0; i < m; i++){int u,v,t;cin >> u >> v >> t;g[u].emplace_back(v,t);g[v].emplace_back(u,t);}for (int i = 2; i <= n; i++){for (int j = 0; j <= k; j++){dis[i][j] = 1e18;}  }//時間 次數 點priority_queue<tuple<int,int,int>,vector<tuple<int,int,int>>,greater<>> pq;pq.push({0,0,1});while (!pq.empty()){auto [ut,uk,u] = pq.top();pq.pop();if(dis[u][uk] < ut || u == n)continue;for(auto & [v,w] : g[u]){if(dis[v][uk] > dis[u][uk] + w){dis[v][uk] = dis[u][uk] + w;pq.push({dis[v][uk],uk,v});}if(uk < k && dis[v][uk+1] > dis[u][uk] + w / 2){dis[v][uk+1] = dis[u][uk] + w / 2;pq.push({dis[v][uk+1],uk+1,v});                }}}int ans = 1e18;for (int i = 0; i <= k; i++){ans = min(ans,dis[n][i]);}cout << ans << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}

AT_abc164_e [ABC164E] Two Currencies - 洛谷

思路:

本題特別注意,由于可以無限兌換,因此需要特判一下還要不要換,以及換了之后不能超過多少,同時不難看出我們所需的硬幣最大數,以此優化內存確定上限

同時還有能不能走,如果不能走記得及時止損

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endlstruct MyStruct
{int to, cost, time;
};
vector<vector<MyStruct>> g(55);
vector<pair<int, int>> chage(55);
int n, m, s;
//到 i 城市還剩 j 枚銀幣
int dis[55][3505];
//int vis[55][3505];
void solve()
{cin >> n >> m >> s;for (int i = 0; i < m; i++){int u, v, x, t;cin >> u >> v >> x >> t;g[u].push_back({ v,x,t });g[v].push_back({ u,x,t });}for (int i = 1; i <= n; i++){int c, d;cin >> c >> d;chage[i] = { c,d };}memset(dis, 0x3f, sizeof dis);int hascoin = min(2500LL, s);dis[1][hascoin] = 0;priority_queue<pair<pair<int,int>, int>, vector<pair<pair<int, int>, int>>, greater<>> pq;//耗時 銀幣 節點pq.push({ {0,hascoin}, 1});while (!pq.empty()){auto t = pq.top();pq.pop();int now = t.second;int costtime = t.first.first;int has = t.first.second;if (dis[now][has] < costtime){continue;}//if (vis[now][has])//{//    continue;//}//vis[now][has] = 1;for (auto & son : g[now]){int shengxia = has - son.cost;if (shengxia < 0){continue;}if (dis[son.to][shengxia] > dis[now][has] + son.time){dis[son.to][shengxia] = dis[now][has] + son.time;pq.push({ {dis[now][has] + son.time,shengxia},son.to });}}int newcoin = min(has + chage[now].first,2500LL);if (dis[now][newcoin] > dis[now][has] + chage[now].second){dis[now][newcoin] = dis[now][has] + chage[now].second;pq.push({ {dis[now][has] + chage[now].second,newcoin},now });}}for (int i = 2; i <= n; i++){int ans = 1e18;for (int j = 0; j <= 2500; j++){ans = min(ans, dis[i][j]);}cout << ans << endl;}
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

176. 裝滿的油箱 - AcWing題庫

思路:

和上題差不多,屬于可增加機會類型,貪心判斷是否需要即可

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
int cost[1005];
vector<vector<pair<int, int>>> g(1005);
//從起點到 i 且剩下 j 油量的最小代價
int dp[1005][105];
int vis[1005][105];
struct Node
{int use, now, fuel;bool operator< (const Node& t) const //重載運算符,以d為優先級的小根堆{return use > t.use;}
};
int fuc(int c,int s,int e)
{memset(dp, 0x3f, sizeof dp);memset(vis, 0, sizeof vis); dp[s][0] = 0;priority_queue<Node> pq;pq.push({0,s,0});while (!pq.empty()){auto t = pq.top();pq.pop();if (t.now == e){return t.use;}//if (vis[t.now][t.fuel])//{//    continue;//}//vis[t.now][t.fuel] = 1;if (t.use > dp[t.now][t.fuel]){continue;}if (t.fuel < c && dp[t.now][t.fuel + 1] > t.use + cost[t.now]){dp[t.now][t.fuel + 1] = t.use + cost[t.now];pq.push({ t.use + cost[t.now] ,t.now,t.fuel + 1 });}for (auto & son : g[t.now]){if (t.fuel >= son.second && dp[son.first][t.fuel - son.second] > t.use){dp[son.first][t.fuel - son.second] = t.use;pq.push({ t.use,son.first,t.fuel - son.second });}}}return -1;
}void solve()
{int n, m;cin >> n >> m;for (int i = 0; i < n; i++)cin >> cost[i];for (int i = 0; i < m; i++){int u, v, d;cin >> u >> v >> d;g[u].push_back({ v,d });g[v].push_back({ u,d });}int q;cin >> q;while (q--){int C, S, E;cin >> C >> S >> E;int ans = fuc(C, S, E);if (ans == -1){cout << "impossible\n";}else{cout << ans << endl;}}
}
signed main()
{cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

3200. 無線網絡 - AcWing題庫

思路:

模板,但是要自己建圖,注意一下即可

代碼:

#include <iostream>
#include <algorithm>
#include<cstring>
#include <iomanip>
#include<cctype>
#include<string>
#include <set>
#include <vector>
#include <cmath>
#include <queue>
#include <unordered_set>
#include <map>
#include <unordered_map>
#include <stack>
#include <utility>
#include <array>
#include <tuple>
using namespace std;
#define int long long
#define yes cout << "YES" << endl
#define no cout << "NO" << endl
vector<vector<int>> g(205);
vector<pair<int, int>> pos(205);
int n, m, k, r;
//到達 i 且多用了 j 個路由器的最小值
int dp[205][105];
struct Node
{int now,usek;
};bool check(pair<int,int> p1,pair<int,int> p2)
{return (pow(p1.first - p2.first, 2) + pow(p1.second - p2.second,2)) <= r * r;
}void fuc()
{queue<Node> pq;dp[0][0] = 0;pq.push({0,0});while (!pq.empty()){auto t = pq.front();pq.pop();if (t.now == 1){continue;}for (auto& son : g[t.now]){int tempk = t.usek;if (son >= n)tempk++;if (tempk > k) continue;if (dp[son][tempk] > dp[t.now][t.usek] + 1){dp[son][tempk] = dp[t.now][t.usek] + 1;pq.push({ son,tempk });}}}
}void solve()
{memset(dp, 0x3f, sizeof dp);cin >> n >> m >> k >> r;for (int i = 0; i < n+m; i++){cin >> pos[i].first >> pos[i].second;}for (int i = 0; i < n+m; i++){for (int j = 0; j < n+m; j++){if (i == j) continue;if (check(pos[i], pos[j]))g[i].push_back(j);}}fuc();int ans = 1e9;for (int i = 0; i <= k; i++){ans = min(dp[1][i], ans);}cout << ans-1 << endl;
}
signed main()
{//cin.tie(0)->sync_with_stdio(false);int t = 1;//cin >> t;while (t--){solve();}return 0;
}

小雨坐地鐵

思路:

特殊題型,這里我們是已經知道了有多少層,同時有無限次操作,因此需要改變

本題中我們使用到了另外一個技巧:虛點

我們可以選擇構建分層圖,但是如果層層間相互連接顯然是一個 平方級別 的復雜度,我們顯然不能接受

不妨考慮 n 個超級點源做 “虛層”,所有的點換線時我們做一個改變:先從 i 層 到 虛層,然后從虛層 到其余層,這樣我們就變成了 線性級別的圖

具體的,到 虛層 的權值為 0,而到其余層的權值就是 i 地鐵站的 a[i],對于同一層我們正常建圖即可

代碼:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define yes cout << "YES\n"
#define no cout << "NO\n"
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
const int N = 1e6+1e3+7;
int n, m, s, e;
// 第幾號線的 第幾站 多少錢
vector<vector<tuple<int, int>>> g(N);
int dis[N];void solve()
{fill(dis, dis + N, 1e18);cin >> n >> m >> s >> e;for (int i = 0; i < m; i++){int a, b, c;cin >> a >> b >> c;int last, now;for (int j = 0; j < c; j++){cin >> now;g[i * n + now].emplace_back(n * n + now, 0);g[n * n + now].emplace_back(i * n + now, a);if (j){g[i * n + last].emplace_back(i * n + now, b);g[i * n + now].emplace_back(i * n + last, b);}last = now;}}s = n * n + s;e = n * n + e;dis[s] = 0;priority_queue<tuple<int, int>, vector<tuple<int, int>>, greater<>> pq;pq.push({0, s});while (!pq.empty()){auto [w, u] = pq.top();pq.pop();if (w > dis[u] || u == e)continue;for (auto &[v, cost] : g[u]){int newcost = w + cost;if (dis[v] > newcost){dis[v] = newcost;pq.push({newcost, v});}}}if (dis[e] == 1e18){cout << "-1\n";return;}cout << dis[e] << endl;
}signed main()
{ios::sync_with_stdio(false);cin.tie(nullptr);int t = 1;while (t--){solve();}return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/919064.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/919064.shtml
英文地址,請注明出處:http://en.pswp.cn/news/919064.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

VS Code配置MinGW64編譯MATIO庫

VS Code 使用 MinGW64 編譯 C 代碼并配置 MATIO 庫的完整步驟 1. 安裝 MSYS2 下載 MSYS2 訪問 MSYS2 官網下載安裝包&#xff08;選擇 x86_64 版本&#xff09;默認安裝路徑&#xff1a;C:\msys64 更新 MSYS2 包數據庫 打開 MSYS2 MinGW 64-bit&#xff08;注意不是 MSYS&…

【前端Vue】使用ElementUI實現表單中可選擇可編輯的下拉框

由于項目在vue的開發框架下&#xff0c;因此使用ElementUI組件庫進行實現。我希望可選擇可編輯的下拉框右側有跟下拉框一樣的箭頭&#xff0c;并且在未輸入任何內容時&#xff0c;點擊該框體會出現選擇列表進行填充數據的選擇&#xff0c;點擊選中數據后列表消失&#xff0c;數…

每日五個pyecharts可視化圖表-line:從入門到精通 (4)

歡迎來到pyecharts折線圖系列的第四篇文章&#xff01;在前三篇中&#xff0c;我們已經掌握了多種折線圖類型&#xff0c;包括基本折線圖、平滑折線圖、雨量流量關系圖、多X軸折線圖、堆疊區域圖和階梯圖等。在本文中&#xff0c;我們將繼續探索五種更高級的折線圖類型&#xf…

MySQL中的字符串函數

目錄 一、字符串【分割】函數&#xff1a;SUBSTRING_INDEX() SUBSTRING_INDEX函數 練習題 統計每種性別的人數 提取博客URL中的用戶名 截取出年齡 SQL83 商品id數據清洗統計 SQL250 查找字符串中逗號出現的次數 二、字符串【截取】函數&#xff1a;SUBSTRING() 基本語…

CodeBuddy IDE深度體驗:AI驅動的全棧開發新時代

在人工智能技術迅猛發展的今天&#xff0c;開發者工具正在經歷一場深刻的變革。騰訊推出的CodeBuddy IDE作為全球首個“產設研一體”的AI全棧高級工程師工具&#xff0c;重新定義了開發者的日常工作流程。 從需求分析到設計、編碼、部署&#xff0c;CodeBuddy通過AI能力將傳統…

實現Android圖片手勢縮放功能的完整自定義View方案,結合了多種手勢交互功能

主要功能特點&#xff1a;支持雙指手勢縮放圖片&#xff0c;通過ScaleGestureDetector實現平滑的縮放效果25雙擊圖片可切換初始大小和中等放大比例16使用Matrix進行圖像變換&#xff0c;保持縮放中心點為手勢焦點位置57自動縮放動畫通過Runnable實現漸進式變化1限制最小和最大縮…

uni-app實戰教程 從0到1開發 畫圖軟件 (橡皮擦)

一、本期內容簡述1. 開發內容上一期&#xff0c;我們一起學習了如何進行繪畫&#xff0c;本期我們將學習如何擦除我們所繪畫的內容&#xff0c;也就是“橡皮擦”功能。首先&#xff0c;我們應該明確需求&#xff0c;橡皮擦可以擦除掉我們繪畫的內容。2. 開發需求所以開發需求&a…

《A Practical Guide to Building Agents》文檔學習

《A Practical Guide to Building Agents》文檔總結 該文檔是一份面向產品和工程團隊的實用指南&#xff0c;旨在幫助團隊探索并構建首個基于大語言模型&#xff08;LLM&#xff09;的智能體&#xff08;Agent&#xff09;&#xff0c;提煉了大量客戶部署經驗&#xff0c;提供了…

OpenCV圖像注冊模塊

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 注冊模塊實現了參數化圖像配準。所實現的方法是直接對齊&#xff08;direct alignment&#xff09;&#xff0c;即&#xff0c;它直接使用像素值來…

模型驅動與分布式建模:技術深度與實戰落地指南

摘要 在AI、云原生與全球化協作的大潮中&#xff0c;模型驅動架構&#xff08;MDA&#xff09;與分布式建模不再是概念&#xff0c;而是支撐復雜系統設計與持續演化的核心引擎。本文從元模型、模型轉換引擎&#xff0c;到協同協議、沖突解決算法&#xff0c;再到AI輔助建模與自…

計算機基礎速通--數據結構·圖的基礎應用二(基礎圖算法)

如有問題大概率是我的理解比較片面&#xff0c;歡迎評論區或者私信指正。 最近了解到了一個新的改變和提高自己的方法時刻記錄不論多小的事情都記下&#xff0c;我目前用了4天&#xff0c;之前感覺一天天忙死但沒啥收獲&#xff0c;但是記錄了之后知道自己的時間花在了哪里&…

設計模式-策略模式 Java

模式概述 策略模式是一種行為型設計模式&#xff0c;它通過定義一系列可互換的算法&#xff0c;并將每個算法封裝成獨立類&#xff0c;使客戶端能夠根據需要動態切換算法 簡單代碼示例 // 1. 抽象策略接口 interface PaymentStrategy {void pay(int amount); }// 2. 具體策略實…

【機器學習深度學習】客觀評估訓練程度

目錄 前言 一、什么是客觀評估&#xff1f; 二、客觀評估的兩大核心方法 1. 判別式評測&#xff08;Discriminative Evaluation&#xff09; 2. 生成式評測&#xff08;Generative Evaluation&#xff09; 三、為什么客觀評估成本更高&#xff1f; 1.訓練目標收緊 2.訓…

Linux軟件編程:線程間通信

目錄 一、線程間通信基礎 1. 概念 2. 通信基礎&#xff1a;共享空間 二、互斥鎖&#xff08;Mutex&#xff09; 1. 概念 2. 使用流程 3. 函數接口 三、死鎖 1. 概念 2. 死鎖產生的 4 個必要條件 3. 避免死鎖的方法 四、信號量&#xff08;Semaphore&#xff09; 1…

【學習筆記】JVM GC回收機制

1.三種基本的垃圾回收算法 1>標記-清除法 ①先將從樹根開始&#xff0c;可以到達的對象標記為可達&#xff08;JVM中的對象們存儲為一顆樹&#xff09; ②將沒有標記的對象清除掉 缺點&#xff1a;會產生大量內存碎片 2>復制算法&#xff08;新生代&#xff09; ①先將a區…

軟件的終極:為70億人編寫70億個不同的軟件

這是個腦洞大開的想法。昨天晚上&#xff0c;我在用Claude code幫我寫一個小工具&#xff0c;用來管理我本地那些亂七八糟的文檔。寫著寫著&#xff0c;突然意識到一個問題&#xff1a;這個工具完全是按照我的工作習慣定制的——我喜歡用Markdown&#xff0c;習慣把TODO放在文件…

LakeHouse--湖倉一體架構

大家可能發現了,近些年湖倉一體數據架構被提及的頻率越來越高。各家大廠也有湖倉一體架構的實踐,也有很多公開分享。 那什么是湖倉一體?為什么出現了湖倉一體架構,換言之,它解決了以前數據倉庫、數據湖+數倉兩層架構所不能解決的什么問題? 本文會從數倉、數據湖依次介紹…

基于FPGA的實時圖像處理系統(1)——SDRAM回環測試

SDRAM回環設計 文章目錄SDRAM回環設計一、SDRAM簡介1、引腳2、內部結構框圖3、操作指令二、系統設計三、實現流程1、SDRAM接口2、FIFO設置3、內部SDRAM的控制模塊4、其他四、實現效果五、總結六、代碼1、top2、sdram_top3、sdram_ctrl一、SDRAM簡介 SDRAM英文全稱“Synchronou…

一鍵檢測接口是否存活:用 Python/Shell 寫個輕量級監控腳本

網羅開發&#xff08;小紅書、快手、視頻號同名&#xff09;大家好&#xff0c;我是 展菲&#xff0c;目前在上市企業從事人工智能項目研發管理工作&#xff0c;平時熱衷于分享各種編程領域的軟硬技能知識以及前沿技術&#xff0c;包括iOS、前端、Harmony OS、Java、Python等方…

優秀工具包-Hutool工具詳解

優秀工具包-Hutool工具詳解 課程概述 Hutool簡介 定位&#xff1a; 小而全的Java工具庫&#xff0c;簡化開發流程。對文件、流、加密解密、轉碼、正則、線程、XML等JDK方法進行封裝。 核心優勢&#xff1a;零依賴、高性能、中文網頁完善。 應用場景&#xff1a;Web開發、數…