补充:消除epsilon产生式等

epsilon-约束法详解:在多目标优化中获取完整Pareto前沿的实操指南 多目标优化中,目标冲突与量纲差异常使加权法等传统方法难以兼顾,尤其在非凸Pareto前沿上会产生盲区。epsilon-约束法通过选取主目标并将次目标转为带上限的约束,以“切面”方式逼近可行域,能有效发现加权法遗漏的折中解。其核心思想清晰,适合与线性规划、混合整数规划及商业求解器结合,在供应链决策、组合优化、能源调度等真实场景中稳定落地。本文从数学原理出发,给出epsilon范围计算、网格扫描、Pareto筛选的完整流程,并总结了实际工程中的关键陷阱与改进策略。 阅读详情

开学步入正轨,更新的速度肯定要变慢了ヾ|≧_≦|〃
有同学让我添加电路状态转换图的有前置条件和后置条件的情况,其实在上篇文章中已经表述了电路状态转换图的意义:电路状态转换图描述的是从某个起点进入,不管经过怎样的变换,如果要满足题目规定的条件则必定会从某个终点出去这样的情形,起点和终点并不重要,而前置条件和后置条件都是针对起点和终点的,并不会对电路状态转换图有什么影响。
state
上图表示的就是a,b,c都为偶数,前置条件为以a或b开头。

消除ϵ产生式

1. Find out all ϵ productions. 用迭代法找出所有的ϵ产生式

V0’为所有直接推出ϵ的集合
V0”为V0’与能推出V0’元素的交集…
当某一次迭代的集合和上次迭代的集合相等时迭代结束。

Example: S->ABC, A->aA|ϵ, B->bB|ϵ, C->cC|ϵ
V0’ = {A,B,C}
V0” = {S,A,B,C}
V0”’ = {S,A,B,C}
End

这一步上课讲的有点模糊,老师的意思是这样,如果A->other|ϵ,那么在右边能推出A的表达式里就替换为两种情况:A和空。例如,如果S->A, A->aA|ϵ,那么我们将S替换为两种情况,S->A或S->ϵ,在上面的S->ABC里,每一个ABC都能有空的情况出现,那么对应我们应该替换为2*2*2=8个式子:

S->ABC
S->BC
S->AC
S->AB
S->A
S->B
S->C
S->ϵ

3. Eliminate all ϵ-productions except for S->ϵ :删除ϵ产生式

删掉在替换后的所有ϵ产生式,S->ϵ的处理会在后面提及。

4. S->ϵ的处理

将S->ϵ替换为S’->S, S’->ϵ

实际使用中的简化

在实际操作中,除了要注意S->ϵ的情况,其他情况都非常好处理。首先直接删除生.成ϵ的式子。比如A->aA|ϵ变成A->aA,然后找到所有一次间接的ϵ产生式,比如B->bA,添加A为空的情况,如B->bA|b,如果没有S->ϵ就已经可以了。

ESP32-S3麦克风阵列实战:从选型到回声消除 在嵌入式语音交互系统中,麦克风阵列与回声消除是实现高质量拾音的关键技术。其原理基于多路音频同步采集和自适应滤波算法,通过数字信号处理消除环境噪声与扬声器回声,显著提升语音识别准确率。技术价值在于低功耗、低成本且支持离线唤醒,适用于智能音箱、会议拾音器、车载语音等场景。ESP32-S3凭借向量指令加速和多路I2S输入,成为理想平台。本文深入探讨硬件选型、I2S配置及NLMS算法实现,分享实战经验与优化技巧。 阅读详情

相关推荐

编译原理名词解释实战:从正规式到词法分析器代码实现

正规式、NFA、DFA是编译原理词法分析的核心概念,其原理在于通过状态机将正则表达式转化为可执行代码。掌握这些技术能帮助开发者构建高效的词法分析器,应用于编译器前端、DSL解析等场景。词法分析器生成工具如flex基于最长匹配原则,需注意关键字与标识符的规则顺序。本文结合编译原理名词解释,深入讲解词法分析器实现中的关键技术与避坑指南。

weixin_34320724的博客 366

上下文无关文法消除文法中的ε产生式、单产生式、以及无用符号(java)

设计上下文无关文法的变换算法实验目的 编程实现上下文无关文法的变换算法,用于消除文法中的ε产生式、单产生式、以及无用符号。

fuels的博客 1074

消除文法中空产生式、无关产生式和单产生式方法的实现

该代码是我做的期中作业,经过多次调试确认可行并附有详细的说明注释

个人笔记——消除无用符号·消除空产生式·消除单一产生式·消除左递归

消除无用符号和空产生式消除无用符号消除空产生式消除单一产生式消除左递归 消除无用符号 消除无用符号算法: 对于任意上下文无关文法G=(V,T,P,S),w∈L(G),X∈V,若存在a,b∈(VUT)*使得S经过若干步推出aXb,aXb经过若干步推出w,则称X为有用符号,否则为无用符号。 首先计算“产生的”符号集N:每个T中的符号都是产生的,若A→a∈P且a中符号都是产生的,则A是产生的。 伪代码: for (int i=0;i<V.num;i++) for(int j=0;j<v.

看看就好,IT小白 6184

文法化简 消除空产生式 单元产生式 消除无用符号

c++源码 文法化简的步骤: 1.消除空产生式 2.消除单元产生式 3.消除第二类无用符号 4.消除第一类无用符号 附演示视频,是两个分开的算法,可以自己合并一下

(苏州大学编译原理)去空产生式和去单产生式和无用产生式//python代码

python翻译java写的代码,有可执行文件和源码文件。 (苏州大学编译原理课程实验)去空产生式和去单产生式和无用产生式

编译原理——文法的化简与改造(附源代码)

文法的化简与改造1、无用符号及无用产生式的删除 无用符号:设有一文法G[S]= (VN ,VT ,P,S),说G中的一个符号X∈V是有用的是指X至少出现在一个句子的推导过程中,即满足:存在α,β∈V*,有S=*>αXβ 存在ω∈VT* ,αXβ=*>ω否则X为无用符号 设有文法G[S]= (VN ,VT ,P,S),首先用算法2.1改造该文法的到G1[S]= (VN

MMOG Server/Graphics Engine/C++ - 周龙亭的专栏 1万+

团队管理中最棘手的6个问题

研发团队的管理棘手问题,大多集中在。

xiaolyuh的专栏 746

编译原理笔记

编译消除左递归  A-&gt;Aα|β 结果 A-&gt;βR R-&gt;αR|ε 串的各部分术语   一个串abcde……1234一共有n个 这个串的前缀,从这个串的尾部开始删除连续的0个、1个……n个 , 例如abcde……1234,abcde……123,abcde……12,ε 串的前缀有n+1个; 这个串的后缀,从这个串的开始处删除连续的0个、1个……n个, 例如abcde...

⊙-→棒棒糖ing .____` 928

CentOS 7 安装 Python 3.10

我这里已经软链接了,正常未链接之前是python->python2.7而不是python3.10。python2.7默认安装是在 /usr/bin目录中,切换到/usr/bin/更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用。2. 安装 Python 3.10 必需的 openssl >= 1.1.1。默认的centos7是没有安装pip,先添加epel扩展源。/usr/bin/python 修改为如下。添加软链接,将原来的链接备份。添加python3的软链接。

bensonyang888的博客 2905

Fluent新手避坑:遇到‘Floating point exception’别慌,这7个排查步骤帮你搞定

本文为Fluent新手提供了7个排查'Floating point exception'错误的实用步骤,包括边界条件检查、时间步长优化、求解器配置等关键技巧。通过系统化的诊断流程,帮助用户快速定位并解决CFD仿真中的浮点异常问题,提升计算稳定性。

weixin_42531886的博客 287

Java实现消除一切左递归(编译原理实验)

说明: 语法分析是编译程序的核心功能之一。语法分析可以通过确定分析或者不确定分析来实现,在实际的编译器构造中,几乎都是采用确定分析方式。本程序的目的就是将包含左递归的产生式(不确定式)转为等价的右递归产生式(确定式)。 简介: 本程序包含两个类,一个类EliminateLeftRecursive(Eliminate----消除,Left----左,Recursive----递归)用于封装数据的存取(成员变量)以及主要函数(成员方法);一个类Test用于测试,对输入、输出的格式进行一定的约束。 主类结构如下:

weixin_45685353的博客 2071

保姆级教程:在RK3588平台上为IMX415 Sensor配置HDR2曝光(附完整代码与避坑点)

本文提供RK3588平台上为IMX415 Sensor配置HDR2曝光的详细教程,涵盖基础概念、限制条件、实战配置步骤及常见问题解决方案。通过完整代码示例和关键参数解析,帮助开发者高效实现HDR2曝光模式,提升图像质量并避开常见陷阱。

weixin_28685287的博客 284

Java 11 : Epsilon 简介(上)

Epsilon: Release 11 ,HotSpot虚拟机提供的GC. 特点: 一个处理内存分配但不实现任何实际内存回收机制的GC,一旦可用的Java堆耗尽,JVM将关闭。 目标: ““Provide a completely passive GC implementation with a bounded allocation limit and the lowest late...

ld3205的博客 2097

立创开源PEX88048 8盘位M.2扩展卡硬件设计与PCIE4.0交换机应用解析

本文详细解析了基于Broadcom PEX88048 PCIe 4.0交换芯片的8盘位M.2扩展卡硬件设计。文章深入探讨了核心芯片选型、关键供电与安全设计、引脚配置、固件刷写方法,并重点剖析了PCIe 4.0时钟架构与高速PCB布局的核心思想,旨在帮助开发者理解如何设计高性能、高可靠性的存储扩展方案,并有效控制成本。

weixin_28949937的博客 620

TikTok滑块验证码verifyV2逆向实战:从fp生成到captchabody加密的完整流程解析

本文详细解析了TikTok滑块验证码verifyV2的逆向工程全流程,从fp参数生成到captchabody加密机制,涵盖了验证码触发、WASM解密、轨迹模拟等关键技术点。通过实战案例和代码示例,帮助开发者深入理解反爬机制,提升逆向工程能力,应对复杂的验证挑战。

weixin_28568819的博客 478

游戏开发中浮点数精度问题:用Epsilon解决坐标漂移的实战指南

在计算机图形学与游戏开发中,浮点数精度限制是导致数值误差的常见根源。由于二进制表示法的固有缺陷,实数运算会产生微小的舍入误差,这些误差在连续帧更新中不断累积,最终表现为视觉上的坐标漂移或物理不稳定。从工程实践角度,引入Epsilon阈值概念是平衡精度与稳定性的关键技术手段,它通过定义可接受的误差范围,将浮点数比较从绝对相等转为近似相等。这一原理在游戏物理模拟、动画插值和网络同步等场景中尤为重要,能有效解决角色滑动、物体不对齐等手感问题。本文结合Unity和C++实例,深入探讨如何根据数据尺度动态选择Epsi

weixin_30216561的博客 556

Python爬虫实战:公共资源交易平台招标数据采集实战 - 从零构建企业情报系统(附CSV导出 + SQLite持久化存储)!

我长期专注 Python 爬虫工程化实战,主理专栏 👉 《Python爬虫实战》:从采集策略到反爬对抗,从数据清洗到分布式调度,持续输出可复用的方法论与可落地案例。内容主打一个“能跑、能用、能扩展”,让数据价值真正做到——抓得到、洗得净、用得上。

喵手的博客 1288

消除左递归java实现

词法分析---消除左递归

36岁去伐木 720

一篇文章足够你学习Bluez,提供史上最全的Bluez教程,让你告别Bluez从入门到放弃

Bluez是真的难,说“入门到放弃”真的毫不夸张,Bluez的学习曲线陡峭,要求对Linux 系统/驱动概念、D-Bus 通信和蓝牙协议都有要求,加上网络上其实没有一个完整的介绍Bluez系列的文档,所以不管是蓝牙初学者还是蓝牙从业人员,都有不小的难度。

朝气蓬勃 2539

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

【编译Chap4】求first集、follow集例题

编译原理中求解FIRST集与FOLLOW集的规则,包括逐符号处理、空串传播及递归消除方法。通过六道典型例题演示了算法应用,强调在计算FIRST集时需持续追踪ε(空串)并正确处理左递归。文中指出常见错误如误将可空符号的ε直接加入前缀,强调应结合后续符号判断。

冰糖雪梨的学习笔记 595

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

正规式、正规文法、NFA 等价转换:3 类场景与 6 个转换规则实战

本文深入探讨了正规式、正规文法与NFA之间的等价转换原理及实战应用。通过详细解析三大工具的数学本质和转换规则,结合6个核心转换算法和3类典型场景,帮助读者掌握编译原理中的词法分析关键技术。特别针对NFA构造、状态消除法等难点提供了实用解决方案,是理解编程语言解析机制的必备指南。

weixin_34163553的博客 462

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

LL(1)算法

First集合是在文法中用于描述一个非终结符号能够推导出的终结符号的集合它表示的是在文法规则中,一个非终结符号在推导过程中可能出现的第一个终结符号同时某些非终结符号有复数个左部相同的产生式子,所以需要进行提取左公因子,消除重复的产生式并且使用左递归消除,消除无限递归问题数学中公因子含义相同,就是公共因子,而左公因子就是最左边的因子Follow集合是指在一个上下文无关文法中,非终结符号A的Follow集合是所有可以紧跟在A后面的终结符的集合简而言之,该非终结符号符号后面跟着的第一个终结符。

weixin_40398522的博客 1827

vLLM IR:功能式中间表示如何解耦算子语义与内核实现

vLLM IR 是 vLLM 引入的**功能式中间表示(Functional Intermediate Representation)**,它填补了底层 `torch` 算子与 vLLM 高层层(如 `RMSNorm`、量化算子)之间的空白。本文将围绕 vLLM IR 的设计动机、算子声明与实现注册、`maybe_inplace` 内存优化机制、基于优先级列表的内核选择,以及 `torch.com

gitblog_00311的博客 975

raytracing.github.io常见问题:消除阴影 acne 与采样 artifacts

你是否在使用 raytracing.github.io 项目时遇到过这些问题:物体表面出现杂乱的黑色斑点(阴影 acne)、图像边缘有锯齿状伪像、或者高反光材质表面出现噪点?这些视觉瑕疵严重影响渲染质量,尤其在生产环境中可能导致客户投诉或项目延期。本文将系统分析这些问题的底层成因,并基于 raytracing.github.io 源代码提供可落地的解决方案,帮助你彻底解决这些顽疾。 读完本文你将...

gitblog_00066的博客 970
上一篇: 使用伸展树(SplayTree)统计单词频率的Java实现
下一篇: 词法分析:从RE(正则表达式)到DFA(确定的有限状态机)
cuiods
博客等级 码龄12年 41粉丝 15原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值