0x56 内容简介与例题习题

matlab课后答案杨德平,MATLAB基础教程习题答案作者杨德平例题源程序课件.pdf MATLAB基础教程习题答案作者杨德平例题源程序课件.pdf《MATLAB 基础教程》例题源程序第 2 章【例 2-18】A=[1 2 2 1;2 1 -2 -2;1 -1 -4 -3];format rat %以有理分式显示Z=null(A,'r') %求解空间的有理基础解系通解表示的程序为:syms k1 k2X=k1*Z(:... 阅读详情

《算法竞赛进阶指南》读书笔记汇总
这里面是我在阅读《算法竞赛进阶指南》这本书时的一些思考,有兴趣可以瞧瞧!
如若发现什么问题,可以通过评论或者私信作者提出。希望各位大佬不吝赐教!
许多问题都可以使用二叉堆来进行优化,下面直接看例题吧。

状压dp基本介绍

对于某些问题,我们需要在动态规划的“状态”中记录一个集合,保存“轮廓”的详细信息,以便进行状态转移。

通常,若所记录集合中的元素都是小于 K K K的自然数,且集合大小不超过 N N N,那么我们可以将这个集合表示成一个 N N N位 K K K进制数,用一个 [ 0 , K N − 1 ] [0,K^{N-1}] [0,KN−1]范围内的十进制整数,作为状态中的某一维。这种把集合表示成整数记录dp状态的方法我们称为状态压缩动态规划。然后由于整数范围有限,这类问题的一般特征就是 N N N很小。
让我们通过几道题熟悉一下状压dp的基本应用。

【例题】蒙德里安的梦想(AcWing291)

题目链接
思路:这是一道状态压缩dp的经典例题。首先我们先观察一下题目的特点,我们按行来看,对于某一行 i i i的空格而言,只有三种情况,要么是 2 ∗ 1 2*1 2∗1小方格的上半部分,要么是 2 ∗ 1 2*1 2∗1小方格的下半部分,要么是 1 ∗ 2 1*2 1∗2小方格一部分。如图:
在这里插入图片描述
对于第一种而言,下一行必须补充完这个长方形的下半部分,对于第二种和第三种而言,下一行放哪种都可以(当然也要合法,接下来会说到)
那么有了这个特性之后,我们可以用 1 1 1表示第一种情况,用 0 0 0表示第二种和第三种情况,比如下图:
在这里插入图片描述
那么某一行的状态就可以表示成一个二进制数啦!
我们定义 f [ i ] [ j ] f[i][j] f[i][j]表示第 i i i行的状态为 j j j时,前 i i i行分割方案的总数,其中 j j j是用十进制整数记录的 M M M位二进制数。那么初始状态为 f [ 0 ] [ 0 ] f[0][0] f[0][0],目标状态为 f [ N ] [ 0 ] f[N][0] f[N][0]。
下面我们考虑状态转移:
由于影响到第 i i i行状态的只有第 i − 1 i-1 i−1行,那么我们考虑第 i i i行的状态 j j j是否可以由第 j j j行的状态 k k k转移过来。不难发现,当 k k k中某一位为 1 1 1时, j j j中对应的那一位必须为 0 0 0;当 k k k中某一位为 0 0 0时, j j j中对应的那一位可以为 1 或 0 1或0 1或0。所以第一个条件为:
(1)j & k == 0
另外,我们还需要判断k中放第三种情况的连续位置个数是否为偶数个,就是横着放是否可以放得下。那么如何得到那些横着放的位置呢。我们发现, j ∣ k j | k j∣k之后得到的二进制数中, 0 0 0的位置就是横着放的位置,判断一下连续 0 0 0的个数是否为偶数即可,可以预处理所有状态是否合法(用 s t st st数组)。所以第二个条件就是:
(2)st[j | k] == true
那么就可以轻松的写出代码啦!

AC代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

typedef long long LL; 

const int N = 12;

LL f[N][1 << N];
bool st[1 << N];
int n, m;

int main()
{
	while(cin >> n >> m, n || m)
	{
		for (int i = 0; i < 1 << m; i ++ )
		{
			bool flag = 0, cnt = 0;
			for (int j = 0; j < m; j ++ )
			 	if (i >> j & 1) flag |= cnt, cnt = 0;
				else cnt ^= 1;
			st[i] = flag | cnt ? 0 : 1;		
		}		
		
		memset(f, 0, sizeof f);
		f[0][0] = 1;
		
		for (int i = 1; i <= n; i ++ )
			for (int j = 0; j < 1 << m; j ++ )
				for (int k = 0; k < 1 << m; k ++ )
					if ((j & k) == 0 && st[j | k])
						f[i][j] += f[i - 1][k];
		
		cout << f[n][0] << endl;
	}
	return 0;	
}

【例题】炮兵阵地(AcWing292)

题目链接
思路:这一题和上一题差不多,但是这一题影响第 i i i行状态的有前两行,所以我们的状态需要加上一维。我们定义 f [ i ] [ j ] [ k ] f[i][j][k] f[i][j][k]表示,前 i i i行已经安排完,第 i i i行的状态为 k k k,第 i − 1 i - 1 i−1行的状态为 j j j,并且所有炮兵满足题目要求,炮兵数量的最大值。
转移的时候,我们枚举第 i − 2 i - 2 i−2行的状态,判断状态是否合法即可。判断合法也比较简单,满足以下条件即可:
(1)对于某个行状态,某两个相邻炮兵距离不能小于等于2
(2)对于某两个相邻行状态,炮兵所处位置不能在同一列
(3)炮兵不能放在山地上
详细实现见代码。
这题还卡空间,用滚动数组优化即可。

AC代码:

#include <iostream>

using namespace std;

const int N = 110, M = 11;

int n, m;
int f[3][1 << M][1 << M];
int g[N];
char G[N][M];
int ones[1 << M];


int main()
{
	scanf("%d%d", &n, &m);
	
	for (int i = 0; i < 1 << m; i ++ )
		for (int j = 0; j < m; j ++ )
			if (i & (1 << j))
				ones[i] ++;
				
	for (int i = 1; i <= n; i ++ )
	{
		scanf("%s", G[i] + 1);
		for (int j = 1; j <= m; j ++ )
			if (G[i][j] == 'H') g[i] += (1 << (j - 1));
	}
	
	for (int i = 0; i < 1 << m; i ++ ) 
		if (!(i & g[1] || (i & (i << 1)) || (i & (i << 2))))
			f[1][i][0] = ones[i];
			
	for (int i = 0; i < 1 << m; i ++ )
		for (int j = 0; j < 1 << m; j ++ )
			if (!(i & j || i & g[2] || j & g[1] || (i & (i << 1)) || (i & (i << 2)) || (j & (j << 1)) || (j & j << 2)))
				f[2][i][j] = ones[i] + ones[j];
	
	for (int i = 3; i <= n; i ++ )
	{
		for (int j = 0; j < 1 << m; j ++ )
		{
			if (j & g[i] || (j & (j << 1)) || (j & (j << 2)))
				continue;
			for (int k = 0; k < 1 << m; k ++ )
			{
				if (k & j || k & g[i - 1] || (k & (k << 1)) || (k & (k << 2)))
					continue;
				for (int hh = 0; hh < 1 << m; hh ++ )
				{
					if (hh & k || hh & j || hh & g[i - 2] || (hh & (hh << 1)) || (hh & (hh << 2)))
						continue;
					f[i % 3][j][k] = max(f[i % 3][j][k], f[(i - 1) % 3][k][hh] + ones[j]);	
					
				}	
			}	
		}
	}

	int ans = 0;
	for (int i = 0; i < 1 << m; i ++ )
		for (int j = 0; j < 1 << m; j ++ )		
			ans = max(f[n % 3][i][j], ans);
			
	printf("%d\n", ans);
	return 0;
}

另类思路:这题还有另一个做法,就是用三进制的状态压缩。我们用 2 2 2表示这个格子放了炮兵,用 1 1 1表示这个格子不放炮兵,同一列上一行的格子放了炮兵,用 0 0 0表示这个格子不放炮兵,同一列上一行的格子也不放炮兵。那么根据题意,只有 0 0 0的下一行才能放 2 2 2。
我们考虑前一行的每一个状态可以转移向当前行的哪些状态,需要满足以下条件:
(1)当第 i i i行第 j j j列为 2 2 2时,第 i + 1 i + 1 i+1行第 j j j列必须为1
(2)当第 i i i行第 j j j列为 1 1 1时,第 i + 1 i + 1 i+1行第 j j j列必须为0
(3)山地格子不能填 2 2 2
(4)如果一个格子填了 2 2 2,他后面的两个格子就不能填 2 2 2了
我们定义 f [ i ] [ j ] f[i][j] f[i][j]表示前 i i i行已经安排完,第 i i i行状态为 j j j的最大炮兵数目。其中 j j j是一个用十进制整数表示的三进制数。转移的时候直接dfs出下一行的所有合法状态即可。
细节看代码吧

AC代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 105, M = 60000;

int n, m;
char str[N][11];
int f[N][M];
bool g[N][11];
int pre[11], cur[11];

void Ten_to_Three(int x, int a[])
{
    for (int i = m - 1; i >= 0; i -- )
    {
        a[i] = x % 3;
        x /= 3;
    }
}

void Three_to_Ten(int& x, int a[])
{
    x = 0;
    for (int i = 0; i < m; i ++ )
        x = x * 3 + a[i];
}

void dfs(int row, int col, int sum)
{
    if (col == m)
    {
        int res;
        Three_to_Ten(res, cur);
        f[row][res] = max(f[row][res], sum);
        return;
    }
    
    dfs(row, col + 1, sum);
    if (!g[row][col] && !pre[col] && (col < 1 || cur[col - 1] < 2) && (col < 2  || cur[col - 2] < 2))
    {
        cur[col] = 2;
        dfs(row, col + 1, sum + 1);
        cur[col] = 0;
    }
}

int main()
{
    scanf("%d%d", &n, &m);
    for (int i = 1; i <= n; i ++ )
    {
        scanf("%s", str[i]);
        for (int j = 0; j < m; j ++ )
            g[i][j] = (str[i][j] == 'H');
    }
    
    memset(f, -1, sizeof f);
    f[0][0] = 0;
    
    int up = 1;
    for (int i = 1; i <= m; i ++ )
        up *= 3;
    
    for (int i = 0; i < n; i ++ )
        for (int j = 0; j < up; j ++ )
            if (f[i][j] != -1)
            {
                Ten_to_Three(j, pre);
                for (int k = 0; k < m; k ++ )
                    cur[k] = max(pre[k] - 1, 0);
                dfs(i + 1, 0, f[i][j]);
            }
        
    int ans = 0;
    for (int i = 0; i < up; i ++ )
        ans = max(ans, f[n][i]);
    printf("%d\n", ans);
    
    return 0;
}

习题

【练习】岛和桥(AcWing1194)

题目链接
思路:由题意得,每一个点都只会经过一次,我们不难想到用二进制数表示每一个点是否被经过,然后由于题目要求的权值涉及一个三元组,那么与上一题一样,影响当前点也就是最后一个经过的点的点有两个,就是倒数第二个和倒数第三个经过的点。那么我们可以定义 f [ s t a t e ] [ i ] [ j ] f[state][i][j] f[state][i][j]表示当前已经过点的集合为 s t a t e state state,最后一个经过的点为 j j j,倒数第二个经过的点为 i i i,满足条件所有方案中权值的最大值。
转移的时候可以枚举倒数第三个经过的点 k k k进行转移。
接下来就是合法性的判定啦。也比较简单,三个点都必须两两不同且 i i i和 j j j必须相连, k k k和 i i i必须相连。
路径数目,就在求最大值的时候顺便用数组存一下就可以了。

AC代码:

#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 15;

int val[N];
int r[N][N];
int f[1 << N][N][N], g[1 << N][N][N];
int n, m;

int main()
{
    int T;scanf("%d", &T);
    while (T --)
    {
        memset(r, 0, sizeof r);
        memset(f, -0x3f, sizeof f);
        
        scanf("%d%d", &n, &m);
        int sum = 0;
        for (int i = 0; i < n; i ++ )
        {
            scanf("%d", &val[i]);
            sum += val[i];
        }
        for (int i = 0; i < m; i ++ )
        {
            int u, v;
            scanf("%d%d", &u, &v);
            u --, v --;
            r[u][v] = r[v][u] = val[u] * val[v];
        }
        
        for (int i = 0; i < n; i ++ )
            f[1 << i][i][n] = 0, g[1 << i][i][n] = 1;
            
        for (int state = 0; state < 1 << n; state ++ )
            for (int i = 0; i < n; i ++ )
            {
                if (!(state >> i & 1)) continue;
                int pre = state ^ (1 << i);
                for (int j = 0; j < n; j ++ )
                {
                    if (!(pre >> j & 1)) continue;
                    if (!r[i][j]) continue;
                    int tmp = pre ^ (1 << j) ^ (1 << n);
                    for (int k = 0; k <= n; k ++ )
                    {
                        if (!(tmp >> k & 1)) continue;
                        int t = f[pre][j][k] + r[i][j] + (r[i][k] ? r[i][k] * val[j] : 0);
                        if (t > f[state][i][j])
                        {
                            f[state][i][j] = t;
                            g[state][i][j] = g[pre][j][k];
                        }
                        else if (t == f[state][i][j])
                            g[state][i][j] += g[pre][j][k];
                    }
                }
            }
            
        int ans = 0, num = 0;
        for (int i = 0; i < n; i ++ )
            for (int j = 0; j < n; j ++ )
                if (ans < f[(1 << n) - 1][i][j])
                {
                    ans = f[(1 << n) - 1][i][j];
                    num = g[(1 << n) - 1][i][j];
                }
                else if (ans == f[(1 << n) - 1][i][j])
                {
                    num += g[(1 << n) - 1][i][j];
                }
                
        if (ans) printf("%d %d\n", ans + sum, num / 2);
        else puts("0 0");
    }
    return 0;
}

芯片(AcWing328)

题目链接
暂未完成

深入解析整车诊断DID服务:0x22读取、0x2E写入与0x2F控制实战指南 本文深入解析整车诊断中的核心DID服务:0x22读取、0x2E写入与0x2F控制。通过实战指南,详细阐述了各服务的报文格式、交互流程、常见应用场景及关键注意事项,帮助工程师掌握与汽车ECU深度对话、进行参数配置与功能控制的关键技术。 阅读详情

相关推荐

电容器50ZLH56MEFC6.3X11

电容器在电子电路中有许多重要的应用,如滤波、耦合、储能、定时等。不同类型的电容器具有不同的性能特点,例如电容量、工作电压、频率响应等。在选择和使用电容器时,需要考虑电路要求、容量、电压等因素,以确保合适的电容器被正确地应用。电容器是一种电子元件,用于存储电荷和电能。它由两个导电板(通常为金属)之间的绝缘介质(电介质)分隔开。当电容器被连接到电源电路中时,它可以在导电板之间存储电荷。

RZer的博客 1179

十六进制数字56转换成0x56,并写入文件

5的字是0x35,你char test[0] = char[0] - 0x30。/* 0-9 减去0x30 A-F 减去0x37。这样56就可以放到一个字节里面成为0x56了。

772

保姆级教程:用Vector CANoe VN56x0硬件配置以太网通信(含CAPL脚本实例)

本文提供了一份详细的Vector CANoe VN56x0硬件配置以太网通信的保姆级教程,涵盖工程配置、硬件连接、协议栈设置和CAPL脚本开发。通过实战案例和核心方法论解析,帮助开发者快速搭建测试环境并优化性能,特别适合汽车电子开发与测试领域的工程师。

weixin_30300225的博客 442

c语言的数据存储

整形和浮点数

gemgod的博客 546

UDS协议入门:5分钟看懂CAN总线程序升级的核心服务(0x10/0x27/0x31详解)

本文深入浅出地解析了UDS协议在CAN总线程序升级中的三大核心服务:0x10会话控制、0x27安全访问和0x31例行控制。通过生动的报文实例,详细说明了如何通过会话切换获取权限、通过安全验证解锁操作,以及如何利用例行程序完成内存擦除与完整性校验,为理解汽车ECU程序升级流程提供了清晰的逻辑框架和实践指导。

nut55的博客 674

告别抓瞎!手把手教你用Vector CANoe搞定以太网通信(VN56x0硬件实战)

本文详细介绍了如何使用Vector CANoe和VN56x0硬件进行以太网通信配置,从硬件连接到通道模式选择、IP堆栈配置到故障排查,提供了实战指南和隐藏参数解析。特别适合汽车电子工程师解决实际测试中的通信问题,提升测试效率和准确性。

weixin_30301449的博客 402

STM32 BootLoader 刷新项目 (十) Flash擦除-命令0x56

STM32F407 芯片采用 Cortex-M4 内核,内置 Flash 存储用于程序和数据存储。扇区 0 到 3:16KB 每扇区扇区 4:64KB扇区 5 到 11:128KB 每扇区这种不同大小的扇区设计适合不同的应用需求,比如小容量扇区用于存储配置数据,大容量扇区用于存储固件。在本篇文章,我们的主要是介绍0x56的命令,这个命令主要是在BootLoader中擦除指定Flash Sector的命令。

艾格北峰嵌入式 3014

UE4罗技X56飞行器开发配置

本文介绍了罗技X56模拟器在UE4中的开发配置映射方法,结合使用UE4插件Windows Rawlnput来进行开发模拟。

yutingjunximu的博客 1万+

算法竞赛进阶指南0x56 状态压缩DP

算法竞赛进阶指南0x56 状态压缩DP

m0_73935863的博客 181

CUDA编译踩坑实录:如何正确设置-gencode参数适配你的GPU算力

本文深入解析CUDA编译中-gencode参数的核心原理与实战配置,帮助开发者解决常见的'Unsupported gpu architecture'错误。通过厘清虚拟架构与真实架构的区别,并提供多版本兼容的CMake配置方案,确保编译出的代码能精准适配不同GPU算力,兼顾性能与广泛兼容性。

weixin_28829903的博客 339

常见进制之间的转换(一):二进制、八进制、十六进制、一般进制转换为十进制

1、二进制转换为十进制 二进制数据是用0和1两个数码来表示的数。它的基数为2,进位规则是逢二进一,以0b开头,如0b1101,接下来就以0b1101为例说明二进制转换为十进制的方法。 2、八进制转换为十进制 八进制,Octal,缩写OCT或O,一种以8为基数的计数法,采用0,1,2,3,4,5,6,7八个数字,逢八进一,以0o开头,如0o34,接下来以0o34为例说明八进制转换为十进制的方法。 ...

wugao0920的博客 2056

保姆级教程:用MediaPipe和BlazePose在Python里实时追踪你的健身动作(附完整代码)

本文提供了一份详细的Python教程,教你如何使用MediaPipe和BlazePose实现实时健身动作追踪。从环境配置、模型选型到实时视频流处理架构设计,再到健身动作量化分析和可视化反馈系统优化,教程涵盖了完整的实现步骤和代码示例,帮助开发者快速构建高效的姿态特征点检测系统。

weixin_42531779的博客 153

0x01 内容总结与例题习题

目录内容总结与例题二进制状态压缩【例题】最短Hamilton路径(AcWing91)lowbit运算习题飞行员兄弟(AcWing116) 内容总结与例题 二进制状态压缩 有一些问题经常可以采用二进制状态压缩起来成为一个容易解决的问题。 常用的操作有: 取出整数nnn在二进制表示下的第kkk位:(n >> k) & 1 把整数nnn在二进制表示下的第kkk位取反:n ^ (1 << k) 对整数nnn在二进制表示下的第kkk位赋值1:n | (1 << k) 对整数

juruo_c的博客 410

5G核心网NAS消息解析:从协议字段到实际抓包分析(附Wireshark示例)

本文深入解析5G核心网NAS消息的实战分析方法,从协议字段解读到实际Wireshark抓包诊断。通过详解扩展协议鉴别器、安全头类型、流程事务标识等核心字段,并结合注册流程故障排查实例,指导工程师快速定位NAS层问题,提升5G网络调试与协议分析效率。

grass的博客 532

校招总结—FPGA从入门到放弃

校招总结—FPGA从入门到放弃 感谢咸鱼FPGA的授权转发,原文地址为https://www.cnblogs.com/xianyufpga/ 其实 offer 早就定下来了,最近忙着入党考试,现在才腾出时间来写个总结。我校招开始于 7 月底,算是比较晚了,后面加了各大校招交流群,发现很多同学都是过完年后就开始打磨项目、复习基础、寻找实习。对比之下我这准备确实仓促,不过结果还算满意。 ...

qq_31515205的博客 8607

C语言典型例题56

将范围为100~200的不能被3整除的数输出。

2302_77517102的博客 1174

YOLO26中的PPM空间金字塔池化:改良设计与多尺度特征提取教程

在计算机视觉的语义分割任务中,准确理解图像中的上下文信息至关重要。例如,在街景图像中,可能同时存在远处的小汽车和近处的大建筑物,网络需要具备捕获多尺度上下文信息的能力。例如,要正确识别图像中的"船",不仅需要看到船本身的特征,还需要理解周围的水面环境。金字塔的每一层对应不同的池化尺度,从细粒度到粗粒度,形成了多层次的特征表示。PPM(Pyramid Pooling Module)正是为了解决这一问题而提出的模块,它通过构建金字塔形状的池化结构,有效地聚合不同尺度的上下文信息,从而提升语义分割的精度。

LXY_LOVE36的博客 82

0x01位运算+0x56状压DP

设原码为S,正数的反码和补码均为S负数的反码,反码符号位不变其余位取反,补码再加一nt范围:−2^31~2^31 − 1(正数少一个,因为有0)unsigned int范围:0~2^32-1。

wangyouyuan67666的博客 3544

Cesium 场景特效之【全球海洋】GL2兼容版

Cesium 场景特效之【全球海洋】GL2兼容版

喜欢钻研前端和分享技术 1279

开源大语言模型GLM-5:从架构解析到部署微调全指南

大语言模型(LLM)作为当前人工智能领域的核心技术,通过海量数据预训练获得强大的语言理解和生成能力。其核心原理基于Transformer架构,通过自注意力机制捕捉长距离依赖关系,在通用语言任务上展现出卓越性能。这一技术价值在于为开发者提供了强大的基座模型,能够通过微调快速适配特定领域需求,显著降低AI应用开发门槛。在实际应用场景中,大模型被广泛用于智能对话、代码生成、内容创作等任务。本文以开源项目GLM-5为例,深入探讨其架构特点,并详细介绍了如何使用LoRA技术进行参数高效微调,以及通过量化优化实现模型在

weixin_28683165的博客 351

GY-56 (VL53L0X) 激光测距

GY-56 模块由测距传感器(VL53L0X)和一个 MCU 组成。工作电压 3-5v,功耗小,体积小,安装方便。其工作原理是,红外 LED 发光,照射到被测物体后,返回光经过 MCU 接收,MCU 计算出时间差,得到距离。

优信电子的博客 2760

大疆RoboMaster嵌入式面试,电机FOC调不出来当场走人

摘要:大疆RoboMaster嵌入式工程师面试以实战能力著称,重点考察FreeRTOS任务调度、FOC电机控制和CAN总线三大核心技能。FreeRTOS部分涉及优先级调度、栈溢出排查及信号量与互斥锁的区别;FOC控制要求现场编写电流环代码,并解释Clarke/Park变换原理;CAN总线则关注仲裁机制、CANopen协议应用及错误帧排查方法。面试强调工程实践,需具备STM32开发经验,建议搭建实际环境进行练习。该岗位被誉为"硬件版修罗场",充分体现大疆对实际开发能力的严格要求。

郑伟强dev的专栏 151

0x55~0x56

目录 0x55~0x66 0x56 状压DP 0x55 有后效性的DP处理 0x55~0x66 0x56 状压DP a.[√] Mondriaan's Dream 题目传送 sol: 注意到数据范围十分的小,考虑状态压缩。 依次考虑每一行,可以注意到这一行的方块分成...

weixin_30897233的博客 469

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

AI智能棋盘支持CH56X系列PCIe接口高速扩展

本文介绍如何利用南京沁恒的国产CH56X系列RISC-V MCU,通过原生集成PCIe 2.0控制器实现AI智能棋盘的高速数据传输与低延迟响应,显著提升系统性能和扩展性,推动国产芯片在边缘AI场景中的应用。

weixin_28968525的博客 577

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

上一篇: 0x17 内容简介与例题习题
下一篇: 0x57 内容简介与例题习题
juruo_c
博客等级 码龄6年 520粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值