P11673 [USACO25JAN] Median Heap G 题解

5个4000比特大状态置换算法的设计与分析 下面是 5 个概念性、实验性的 4000 位可逆置换设计。它们都保证是双射,但未经过密码分析,不可直接用于生产系统。风格分别覆盖:三维 SPN、Feistel、可逆元胞自动机、ARX、宽轨迹/Keccak 式结构。 这 5 个设计分别代表了 SPN、Feistel、元胞自动机、ARX、宽轨迹 Keccak 五种不同风格,覆盖了主流大状态置换的构造思路。再次强调:它们只是实验性概念,若要用于实际协议,必须经过严格安全性分析。 阅读详情

题目传送门

洛谷P11673

题目大意

对于一颗完全二叉树,定义其节点 u u u 的

  • 左儿子 l s = u × 2 ls=u\times2 ls=u×2,右儿子 r s = u × 2 + 1 rs=u\times2+1 rs=u×2+1
  • 父亲为 ⌊ u 2 ⌋ \lfloor \frac u2\rfloor ⌊2u​⌋
  • 置换操作:将 u u u 的值换为 { u , \{u, {u, l s ls ls(如果有), r s rs rs(如果有) } \} } 的中位数,代价为 0 \text0 0
  • 修改操作:将 u u u 的值修改为任意数,代价为 c u c_u cu​
  • “近似中位数”:从最后一个节点 n n n 开始向前执行,若此节点非叶子节点,则进行置换操作,最后节点 1 1 1 (根)的值即为近似中位数

现在给你这颗树的初始权值,和修改每个点的代价。
再给出一个询问列表 m 1 , m 2 , ⋯   , m q m_1,m_2,\cdots,m_q m1​,m2​,⋯,mq​,对于每个询问,回答使树的近似中位数为 m i m_i mi​ 所需要的最小代价。

部分分

首先我们来看 n , q ≤ 1000 n,q\leq1000 n,q≤1000 的部分。
定义函数
p ( m i , a u ) = { 0 m i < a u 1 m i = a u 2 m i > a u 并维护每个询问都刷新的数组  f u = p ( m i , a u ) ,此处  m i 为全局变量 p(m_i,a_u)=\begin{cases}0&m_i<a_u\\1&m_i=a_u\\2&m_i>a_u\end{cases} \\并维护每个询问都刷新的数组\ f_u=p(m_i,a_u),此处\ m_i 为全局变量 p(mi​,au​)=⎩ ⎨ ⎧​012​mi​<au​mi​=au​mi​>au​​并维护每个询问都刷新的数组 fu​=p(mi​,au​),此处 mi​为全局变量
定义dp数组
d p [ u ] [ case ] = 修改节点  u  使其 近似中位数 { case = 0 <   m i case = 1 =   m i case = 2 >   m i 的最小代价 dp[u][\text{case}]=修改节点\ u\ 使其\ 近似中位数\begin{cases}\text{case}=0&<\ m_i\\\text{case}=1&=\ m_i\\\text{case}=2&>\ m_i\end{cases}的最小代价 dp[u][case]=修改节点 u 使其 近似中位数⎩ ⎨ ⎧​case=0case=1case=2​< mi​= mi​> mi​​的最小代价
转移方程
d p [ u ] [ s ] = min ⁡ med { i , j , k } = s d p [ l s ] [ i ] + d p [ r s ] [ j ] + cost [ k ] dp[u][s]=\min_{\text{med}\{i,j,k\}=s}{dp[ls][i]+dp[rs][j]+\text{cost}[k]} dp[u][s]=med{i,j,k}=smin​dp[ls][i]+dp[rs][j]+cost[k]
其中 cost ( k ) \text{cost}(k) cost(k) 代表将 a u a_u au​ 修改为 小于/等于/大于 m i m_i mi​ 的代价
具体地,

vector<int> cost = {c[u], c[u], c[u]};
cost[f[u]] = 0;

dp代码实现:

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define med(a, b, c) (a ^ b ^ c ^ min({a, b, c}) ^ max({a, b, c}))
#define p(m, x) (x < m ? 0 : x == m ? 1 : 2)
#define ls u << 1
#define rs u << 1 | 1
const int N = 2e5 + 5, M = 4e5 + 5;
const int INF = 1e18;
int n, q;
vector<int> a(N), c(N);
vector<int> ans(M);
vector<int> f(N); // f[i]=p(m,i)
int dp[M][3];
// 更新使节点u的近似中位数为m的最小代价
void update(int u)
{
	// 将 a[u] 修改为一个  <m    =m    >m   的数的代价
	vector<int> cost = {c[u], c[u], c[u]};
	cost[f[u]] = 0;

	if (rs >= n) { // 叶子结点
		for (int i = 1; i <= 3; ++i) dp[u][i] = cost[i];
		return ;
	}

	dp[u][0] = dp[u][1] = dp[u][2] = INF;
	for (int i = 0; i < 3; ++i) {
		for (int j = 0; j < 3; ++j) {
			for (int k = 0; k < 3; ++k) {
				int mod = med(i, j, k);
				dp[u][mod] = min(dp[u][mod], dp[ls][i] + dp[rs][j] + cost[k]);
			}
		}
	}
}

对于每个询问,我们都

for (int i = 1; i <= q; ++i) {
	int m;
	cin >> m;
	for (int j = n; j; --j) {
		f[j] = p(m, a[j]);
		update(j);
	}
	cout << dp[1][1] << '\n';
}

注意这里查看 f[j] 的修改情况时一定要倒序!!!这样才能保证从叶子节点开始修改,否则你先把父亲更新了结果儿子还没更等于没更,包WA的。

部分分优化(满分)

我们注意到,可以把问询离线下来。
把问询从小到大排序后,我们再看上码,可以发现每次增大询问值后,并不是所有的 f [ j ] f[j] f[j] 都需要修改。
又因为只有 f [ j ] f[j] f[j] 修改才会造成 dp 改变,只需要每轮查看哪些 f [ j ] f[j] f[j] 被修改了,针对它们更新从这个节点j不断往上更新父亲的 dp,因为显然除了父亲这个节点无法更改任何其他 dp。

显然 f[j] 是越修越大的,因此最多修改2次(0->1,1->2)。

那么,现在我们只需寻找一种高效的方式,每次精准查找需要修改的 f [ j ] f[j] f[j],显然不能遍历,否则直接给你炸成 Time Limit Enough
这个时候,我们想到,可以开一个 p o s [ v a l ] pos[val] pos[val],记录值为 a u = v a l a_u=val au​=val 的 下标 u u u,每次问询值为 m m m 时,就遍历 p o s [ m ] pos[m] pos[m],将其中所有 f [ j ] f[j] f[j] 修改为 1 1 1,注意一定要将 p o s [ m ] pos[m] pos[m] 逆序,使其中内容从 单调递增变为单调递减.然后更新dp。更完后,下一个 m m m 肯定比现在大,因此我们可以预测这些点下一轮的 f [ j ] f[j] f[j] 必定为 2 2 2 ,所以可以在现在这个循环提前修改。
代码实现:

void modify(int u, int state) // 要修的 f[u] 和修成的值
{
	f[u] = state;
	while (u) {
		update(u);
		u >>= 1;
	}
}
int main()
{
	// existing code...
	// 离散化
	for (int i = 1; i <= n; ++i) {
		pos[a[i]].push_back(i);
	}
	for (auto x: query) { // 处理问询,query为排序+离散化后问询数组
		reverse(pos[x].begin(), pos[x].end());
		for (auto i: pos[x]) modify(i, 1);
		ans[x] = dp[1][1];
		for (auto i: pos[x]) modify(i, 2);
	}
	for (int i = 1; i <= q; ++i) {
		cout << ans[m[i]] << '\n';
	}

AC 代码

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define ls u << 1
#define rs u << 1 | 1
const int N = 2e5 + 5, M = 4e5 + 5;
const int INF = 1e18;
int med(int a, int b, int c) { return a ^ b ^ c ^ min({a, b, c}) ^ max({a, b, c}); }
int p(int m, int x) { return m < x ? 0 : m == x ? 1 : 2; }
int n, q;
vector<int> a(N), c(N);
vector<int> ans(M);
vector<int> f(M); // f[i]=p(m,i)
int dp[M][3];
// 更新使节点u的近似中位数为m的最小代价
void update(int u)
{
	// 将 a[u] 修改为一个  <m    =m    >m   的数的代价
	vector<int> cost = {c[u], c[u], c[u]};
	cost[f[u]] = 0;

	if (ls > n) { // 叶子结点
		for (int i = 0; i < 3; ++i) dp[u][i] = cost[i];
		return ;
	}

	dp[u][0] = dp[u][1] = dp[u][2] = INF;
	for (int i = 0; i < 3; ++i) {
		for (int j = 0; j < 3; ++j) {
			for (int k = 0; k < 3; ++k) {
				int mod = med(i, j, k);
				dp[u][mod] = min(dp[u][mod], dp[ls][i] + dp[rs][j] + cost[k]);
			}
		}
	}
}
// update the dp-tree's change due to
// f[u]'s change, which implies a change in cost_u[0/1/2]
void modify(int u, int state)
{
	f[u] = state;
	while (u) {
		update(u);
		u >>= 1;
	}
}
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	cin >> n;
	for (int i = 0; i <= n; ++i) {
		for (int j = 0; j < 3; ++j) {
			dp[i][j] = INF;
		}
	}
	vector<int> all;
	for (int i = 1; i <= n; ++i) {
		cin >> a[i] >> c[i];
		all.push_back(a[i]);
	}
	cin >> q;
	vector<int> m(q + 1);
	for (int i = 1; i <= q; ++i) {
		cin >> m[i];
		all.push_back(m[i]);
	}
	// printf("a: ");
	// for (int i = 1; i <= n; ++i) printf("%lld ", a[i]);
	// printf("\n");
	// printf("m: ");
	// for (int i = 1; i <= q; ++i) printf("%lld ", m[i]);
	// printf("\n");

	// 离散化
	sort(all.begin(), all.end());
	all.erase(unique(all.begin(), all.end()), all.end());
	int cnt = 1;
	map<int, int> corr;
	for (auto i: all) {
		corr[i] = cnt++;
	}
	map<int, vector<int>> pos;
	for (int i = 1; i <= n; ++i) {
		a[i] = corr[a[i]];
		pos[a[i]].push_back(i);
	}
	for (int i = 1; i <= q; ++i) {
		m[i] = corr[m[i]];
	}
	// printf("a: ");
	// for (int i = 1; i <= n; ++i) printf("%lld ", a[i]);
	// printf("\n");
	// printf("m: ");
	// for (int i = 1; i <= q; ++i) printf("%lld ", m[i]);
	// printf("\n");

	vector<int> query;
	for (int i = 1; i <= q; ++i) {
		query.push_back(m[i]);
	}
	sort(query.begin(), query.end());
	query.erase(unique(query.begin(), query.end()), query.end());


	// initialize dp to all '>'s
	for (int i = n; i > 0; --i) {
		// modify(i, 0); unnecessary cuz it's alr all 0s
		update(i);
	}
	// for (int i = 1; i < cnt; ++i) {
	// 	printf("dp[%lld]: {%lld, %lld, %lld}\n", i, dp[i][0], dp[i][1], dp[i][2]);
	// }
	for (int x = 1; x < cnt; ++x) {
		reverse(pos[x].begin(), pos[x].end());
		for (auto i: pos[x]) {
			modify(i, 1);
		}
		ans[x] = dp[1][1];
		for (auto i: pos[x]) {
			modify(i, 2);
		}
		// for (int i = 1; i < cnt; ++i) {
		// 	printf("dp[%lld]: {%lld, %lld, %lld}\n", i, dp[i][0], dp[i][1], dp[i][2]);
		// }
	}
	for (int i = 1; i <= q; ++i) {
		cout << ans[m[i]] << '\n';
	}
	return 0;
}

进食后人

在执行修改dp操作时,要把 a a a 和 m m m 所有元素都遍历到,确保大小关系的正确性,防止有数值未更新。
这点尤其坑,因为如果你只遍历 m m m 的话,样例是 可以过 的,并且总共能 A掉 3 3 3个点,喜提 16 pts 16\text{pts} 16pts。
一定要初始化问询为0。
不仅如此,这个初始化必须逆序。(我卡了大概10min吧

JW01二氧化碳传感器实战:5分钟搞定Arduino环境监测系统(附完整代码) 本文详细介绍了如何使用JW01二氧化碳传感器与Arduino快速搭建环境监测系统。通过简单的硬件连接和完整的代码示例,读者可以在5分钟内实现CO2浓度实时监测,并了解数据解析、常见问题解决及进阶应用扩展。JW01传感器的高精度和易用性使其成为创客和嵌入式开发者的理想选择。 阅读详情

相关推荐

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

OpenClaw + Ollama 本地大模型部署教程:彻底告别Token焦虑

leaning_java的博客 1227

【题解】洛谷 P11673 [USACO25JAN] Median Heap G [树形 dp]

Don’t let fear decide your future.

Isaac Regulus的博客 429

Tesseral 建立地震模型

0. 前言 本节内容主要是总结如何使用 Tesseral 工具建立模型。 1. 模型建立步骤 设置模型的宽度和深度 此处默认都为1000,之后点击“确定” 建立地层 绘制新的地层 右键点击“New polygon” 绘制地层,设置第二个层的名字和纵波速度 绘制第三层,第三层覆盖在前一个层上 第四层如上,第四层如果是最后一层,绘制该层时,要将深度1000包围。 设置观测系统 设置炮点 设置子波为雷克子波,频率设置为30 检波点设置 运行模型 设置好如上选择后,

weixin_41857483的博客 6539

[USACO25OPEN] Election Queries G 题解

S。

peter_code的博客 994

【技术纵览】行为识别前沿模型演进:从CNN到多模态大模型

本文全面解析了行为识别技术从CNN到多模态大模型的演进历程,重点介绍了SlowFast、TimeSformer、VideoMAE和InternVideo等SOTA模型的核心创新与应用实践。通过对比分析各代模型在Kinetics-400等数据集上的表现,揭示了自监督学习和多模态融合如何推动行为识别准确率突破85%,并探讨了工业部署中的技术选型策略与优化方向。

weixin_29169505的博客 153

ctf——writeup

ctf线上赛——第三关地址:http://106.75.86.18:2222提示:ip spoofing——ip伪造首先访问目标地址,一个正常的网页,挺文艺的。上面有些提示。根据上面的提示,我们浏览网页。找了好久,终于找到你。这个跳转链接。(在这个页面下方)我们接着点击这个链接,就跳转到administrator.php这个页面了。看到这个登录页面,就要知道用户名,密码,可是没有怎么办。一开始也试

Child_by_dream的博客 1320

视频隐私脱敏工程化:CSRT/KCF追踪算法在本地推理中的实现与边界

在短视频内容合规审查中,动态遮挡(Dynamic Masking)是高频且高耗时的环节。传统手动关键帧打码不仅效率低下,且在目标快速移动或遮挡时极易出现遮罩漂移。本文从计算机视觉工程角度,解析基于CSRT与KCF算法的目标追踪方案在视频隐私处理中的技术路径、性能权衡及落地实践。

Mysssone的博客 192

【数据分析/商业分析】面试题整理——SQL专题

数据分析\商业分析—面试题整理 自己总结的SQL类的面试题 文章目录数据分析\商业分析—面试题整理1.新增用户2.活跃用户数量3.连续登录4.次(n)日留存5.每个科目下分数最高的两名学生

awater_17的博客 1859

【算法拾光】链表 哈希表|K个一组翻转链表 + 两数之和

K个一组翻转链表需分段反转,借助哑节点与前驱指针维护连接,避免断链;两数之和利用哈希表实现O(1)查找,空间换时间,高效定位目标组合。前者考察链表指针操作,后者聚焦映射关系构建,均为面试高频题。

wuqingyigexiaoba的博客 298

Vibe Coding 实战指南:用 3 类社区资源实现每周高效追新

介绍一种分层技术雷达校准方法,通过领域过滤器(L1技术栈锚定、L2能力映射、L3场景收敛)精准筛选AI编程相关更新,结合可验证的Shell命令与CI任务卡,将信息过载压缩为可执行、可审计的工程实践。

weixin_27251469的博客 330

YOLOv8改进,YOLOv8主干网络替换为ShuffleNetV2

ShuffleNet V2的设计原则:1.减少内存访问成本:通过优化数据传输路径,减少内存访问延迟,提高整体运算速度。2.考虑平台特性:针对不同硬件平台的特性进行优化设计,确保在目标平台上的高效运行。3.结构简洁高效:采用简洁而高效的模块设计,降低计算复杂度,同时保持或提升模型的预测准确性。下图,以四种不同计算复杂度水平下的准确性(在ImageNet验证集上的分类),速度和FLOPs的测量结果。(a, c) 为GPU结果,批量大小为8。(b, d) 为ARM结果,批量大小为1。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 1564

排序算法深度笔记(下):非比较类排序的线性突破与工程边界

排序算法时间复杂度额外空间复杂度稳定性是否基于比较选择排序O(N^2)(O(1))不稳定是冒泡排序O(N^2)(O(1))稳定是插入排序O(N^2)(O(1))稳定是归并排序O(N\log N)(O(N))稳定是快速排序O(N\log N)O(log N)不稳定是堆排序O(N\log N)O(1)不稳定是计数排序(O(N + M))O(M))稳定否基数排序O(N)稳定否桶排序平均O(N) / 最坏O(N^2)

2401_87069538的博客 561

LLaMA-Factory微调教程2:命令行sft微调

本文介绍了如何使用llama-factory项目在本地运行Qwen2-7B大语言模型进行对话。首先通过llamafactory-cli env查看环境配置,然后使用git lfs下载Qwen2-7B模型。创建配置文件qwen2_7b_instruct.yaml,修改模型路径和模板参数。最后通过llamafactory-cli chat命令启动对话服务,加载模型配置文件和tokenizer,完成环境初始化后即可进行交互式对话。

Cachel Wood的博客 8814

算法日常・每日刷题--<动态规划>42

本题为“不相交的线”,与最长公共子序列问题相似。使用动态规划求解:定义 dp[i][j] 表示 nums1[0:i] 与 nums2[0:j] 的最大不相交连线数。若元素相等,则继承左上值加1;否则取上方或左方最大值。最终返回 dp[m][n],即两数组的最大不相交连线数。时间复杂度 O(mn),空间复杂度 O(mn)。

2503_92261635的博客 20

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

C语言程序设计题|有序数组插入数字冒泡排序

题目要求将一个数插入有序数组末尾,并用冒泡排序实现整体升序。代码先将输入数存入数组最后位置,再通过双重循环进行冒泡排序,每轮将较大元素向后移动,最终输出11个升序元素。该方法虽时间复杂度为O(n²),但符合题目要求,逻辑清晰,适合初学者理解排序原理。

2301_81429079的博客 745

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

【算法拾光】模拟|外观数列 + 数青蛙

本文总结两道模拟题解法:外观数列通过迭代统计连续数字个数生成下一项,关键在于处理末尾字符;数青蛙则模拟青蛙叫声“croak”状态转移,维护各阶段青蛙数量,记录最大并发数并确保全部完成。共性在于严格遵循流程、细致处理边界与非法情况,锻炼字符串遍历与状态管理能力。

wuqingyigexiaoba的博客 367

牛客周赛165C题(前后缀性质,递推,排序,枚举)

题目大意:给定长度为 `n` 的数组,选择 `k ∈ [1,n]`,将前 `k` 个元素整体翻转,后面的元素不变。要求操作后的整个数组非递减,统计满足条件的 `k` 的数量。题目链接:https://ac.nowcoder.com/acm/contest/141721/C。时间复杂度:O(nlogn)

2501_94316951的博客 170

【数据结构-3】算法美学之降复杂度

在while循环的循环体内,首先用临时变量保存最后一个位置的数据,再通过for循环把所有元素往后移动一位,最后把tmp中保存的值放到下标为0的位置上去。方法二的思路是:创建新数组,让原数组中后k个数据移动到新数组中前面的位置,让原数组中前numsSize-k个数据移动到新数组中后面的位置,这。这段代码的思路是:三次逆置,第一次逆置前numsSize-k个数据,第二次逆置后k个数据,最后整体逆置。这篇博文分享一道解法不一的算法题,求解过程的目的在于降低算法的时间复杂度,题源力扣。,属于空间换时间的操作。

weixin_44218929的博客 81

算法61,判定是否为字符重排

两字符串能互为重排 ⇔。

sheshibenniaodan的博客 207

算法日常・每日刷题--<动态规划>32

给定严格递增的正整数数组,求最长斐波那契子序列长度。使用二维DP,dp[i][j]表示以arr[i]、arr[j]为最后两项的序列长度,初始化均为2。通过哈希表快速查找前一项target = arr[j] - arr[i],若存在且下标小于i,则状态转移:dp[i][j] = dp[k][i] + 1。遍历更新全局最大长度,最终若结果小于3则返回0。时间复杂度O(n²),空间复杂度O(n²)。

2503_92261635的博客 177

算法札记:几何分布在算法题UVA1262的运用

集卡问题求解核心:将集齐n种优惠券的过程分为n个阶段,每个阶段期望购买次数为 $ \frac{n}{k} $(k为剩余种类数),总期望为 $ n \cdot H_n $(调和数)。通过自洽方程推导单阶段期望,无需几何分布或无穷级数,逻辑清晰且适用于大一水平。例如,n=5时期望约11.42,非5。题目要求以带分数形式输出精确结果,算法上需累加分数并化简。

Keven_11的博客 321

不同的二叉搜索树

互不相同的二叉搜索树的种数,以 j (1<=j<=i)为头节点,左子树是 j-1 个数,右子树就是 i - (j - 1) -1 = i - j个数。所以dp[3] = dp[0] * dp[2] + dp[1] * dp[1] + dp[2] * dp[0]头1 = 左子树0节点 * 右子树2节点,二叉搜索树就是排序树,左子树<根节点<右子树,左右子树也满足左子树<根节点<右子树。头2 = 左子树1节点 * 右子树1节点。所以dp[i] += dp[j-1] * dp[i-j]个节点组成且节点值从。

qq_44721738的博客 150

SSL证书选RSA还是ECDSA:公钥算法、CA签名与兼容性怎么核对

申请SSL证书时,RSA和ECDSA该怎么选?先分清站点公钥算法、CA签名算法和TLS实际兼容性,再用隔离OpenSSL实验读取两类材料,核对申请、续期和部署交接,避免只看Signature Algorithm就选错。

谁呀!的博客 399

考拉兹猜想 - 7

本文通过引入虚数单位重构Collatz猜想的迭代逻辑,指出偶数减半与奇数“乘3加1”的过程在虚数坐标下等价于归结操作。关键在于:乘3加1使奇数跃升至偶数,随后持续减半,而虚数单位代表“无限减1”,实现无限向有限的转化。无论初始值如何,减半始终主导,最终归结为4-2-1循环。该视角消解了正向思维中的速度竞争疑虑,证明归结是必然结果。

杨铸人的博客 40

贪心题目:可以到达的最远建筑

为了到达尽可能远的建筑物,在将砖块替换成梯子时,应将高度差最大位置的砖块替换成梯子,此时剩余的砖块数量最多,如果将高度差较小位置的砖块替换成梯子,则剩余的砖块数量较少,能到达的最远建筑物下标不可能更大。开始向后面的建筑物移动,移动过程中维护优先队列存储正高度差,优先队列的队首元素是最大元素,每次遇到正高度差时优先考虑使用砖块,如果砖块数量不够则使用梯子替换最大高度差位置的砖块,直到砖块和梯子都使用完毕时,到达的建筑物即为最远建筑物。如果以最佳方式使用给定的梯子和砖块,返回可以到达的最远建筑物的下标。

stormsunshine的博客 170

从曲线到储层:Techlog/KAPPA 全流程算法、UltraLAB 选型与本地 AI 部署实战

以高频 CPU 保证交互,以充足内存承载多井与多任务,以 NVMe 打通项目和知识库 I/O,再按本地模型、上下文与并发配置 GPU。对 UltraLAB 用户而言,更合理的采购方式是带着真实项目做选型:一组典型井、一套完整解释模板、一个目标大模型、一次多人并发测试。用实测结果确定配置,才能把预算转化为解释效率,而不是闲置算力。软件模块、操作系统与许可条件以厂商当前正式说明为准;硬件建议需结合项目实测。AI 输出只能作为辅助证据,不能替代岩石物理与油藏工程专业审核。

wdf8088的博客 179

【Deep-OC-SORT 01】多轨迹算法Deep-OC-SORT源码分析

本工程基于Deep-OC-SORT核心模块,重构并适配了EmbeddingComputer(外观特征提取)、CMCComputer(相机运动补偿)与OCSort(主跟踪器)三类。前者实现整框/网格模式的特征提取与L2归一化;后者通过稀疏光流或SIFT匹配估计仿射变换,补偿相机运动;主跟踪器融合IoU、外观相似度与方向一致性,支持模块开关与自定义组件,实现高效多目标跟踪。

Jayson 博客 331
上一篇: [USACO25FEB] Bessie‘s Function G 题解
下一篇: [USACO24DEC] Deforestation S(包括正确性证明)
peter_code
博客等级 码龄5年 41粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值