HFUT&AHU组团训练(一)----DP专题

【MATLAB例程,无人机避障7】基于RRT*与人工势场法(RRT*+APF)的多无人机二维动态路径规划与避障 程序采用快速扩展随机树星算法(RRT*)与人工势场法(APF),实现四架无人机在二维动态障碍环境中的路径规划与协同避碰。通过RRT*的邻域选父和节点重连优化全局参考路径,利用APF进行局部动态避障,绘制全局路径、实际轨迹、安全净间隙、速度与加速度及航程等图像,对比RRT+APF与RRT*+APF的规划效果。无人机起终点、障碍物分布、采样次数及运动约束均可自行调整。 立即下载

网址:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=42394#overview

密码:akak

A题:

题意:求两个字符串的最长公共子串,特别的是,这个子串的每块连续的部分必须大于等于题目所给的k。

思路:第一遍打时完全时一片浆糊,采用常规方法,各种细节没有考虑到,果断删了重打。既然段都要求>=k,那么我一次就先找那连续的长度k,再给这一段记录。相当于先局部,再整体。

#include <cstdio>
#include <iostream>
#include <vector>

using namespace std;

const int MAX_SIZE = 1010;

int K;
string s[2];
int v[MAX_SIZE][MAX_SIZE];

inline int common_len(int i, int j) {
  for (int k = 0; k < MAX_SIZE; k++) {
    if(i+k >= s[0].length() || j+k >= s[1].length()) return k;
    if(s[0][i+k] != s[1][j+k]) return k;
  }
  return -1;
}

inline void check(int i, int j) {
  const int len = common_len(i,j);
  v[i+1][j+1] = max(v[i+1][j+1], max(v[i][j+1], v[i+1][j]));
  if(len >= K) {
    for (int k = K; k < len+1; k++)
        v[i+k][j+k] = max(v[i+k][j+k], v[i][j] + k);
  }
}

int main() {

    for (int i = 0; i < MAX_SIZE; i++)
        v[0][i] = v[i][0] = 0;
    while(cin >> K) {
        if(K == 0) break;
        cin >> s[0];
        cin >> s[1];
        const int n = s[0].size(), m = s[1].size();

        for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            v[i+1][j+1] = 0;
        for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            check(i,j);

        cout << v[n][m] << endl;
  }
}


B题:

题意:有很多俄罗斯套娃,讲其恢复原装,求最后桌子上最少有几个套娃?

思路:先将宽度由小到达排序,再讲高度从大到小排序,为了保证同宽度的只能有一个存在在一组套娃。用一个数组维护高度,每个元素代表一组套娃,值为当前该组套娃高度,数组整体是递减的。每读取一个高度,去覆盖当前能覆盖最高套娃组,若没有能覆盖的,则新建一个元素,即增加一个套娃组。最后求数组长度。

#include<iostream>
#include<algorithm>
#include<cstdio>
#include<cstring>
using namespace std;

struct aaa{
    int w;
    int h;
}a[40005];

int n;
int t;

int cmp(aaa a, aaa b){
    if (a.w == b.w)
        return b.h < a.h;
    return b.w > a.w;
}

int d[40005];


int main(){
    memset(d,1,sizeof(d));
    cout << d[1] << endl;
    scanf("%d",&t);
    while(t--){
        scanf("%d", &n);
        for (int i = 0; i < n; i++)
        scanf("%d%d", &a[i].w ,&a[i].h);
        sort(a, a+n, cmp);

    int len = 0;
    for (int i = 0; i < n; i++){
        int l = 0, r = len;
        int m;
        while(l < r){
            m = (l + r) >> 1;
            if (a[i].h <= d[m])
                l = m+1;
            else r = m;
/*
            if (a[i].h >= d[m])
                r = m
            else l = m;*/
        }
        d[l] = a[i].h;
        len+=l==len;
    }

    printf("%d\n",len);
    }
}

    

C题:

题意:有c(1<=c<=4)种颜色的牌,每种牌n(1<=n<=100)张。给出起始顺序,问最少移动几张牌,可使牌组有序,即牌从小到大,且同颜色为一组。

思路:关键在于c只有4种颜色,方便很多。枚举颜色出现的顺序,定一个序列,计算最长上升子序列s。用序列长度减去子序列长度,即是答案。

#include<iostream>
#include<string>
#include<queue>
#include<stack>
#include<cstdio>
#include<cmath>
using namespace std;

struct aaa{
    int col;
    int val;
}w[500];

int MAX = (1 << 31) -1;
int c, n, sum =MAX;
int d[500];
int a[5]={0};
bool v[500];
int q[500];

void card(){
    int s = c*n;
    for (int i = 1; i <= s; i++){
        d[i] = w[i].val * a[w[i].col];
    }

    q[1] = d[1];
    int len = 1;
    for (int i = 2; i <= s; i++){
        if (d[i] > q[len]) q[++len] = d[i];
        else{
            int l = 1; int r = len;
            while(l <= r){
                int m = (l + r) >> 1;
                if (q[m] < d[i]) l = m + 1;
                else r = m - 1;
            }
            q[l] = d[i];
        }
    }

    if (sum > s - len) sum = s-len;
}
int main(){

    scanf("%d%d", &c, &n);
    int s = c*n;
    for (int i = 1; i <= s; i++){
        scanf("%d%d", &w[i].col, &w[i].val);
    }
    s = 1;
    for (int i = 2; i <= c; i++)
        s = s*i;

    while(s--){
        for (int i = 1; i <= c; i++){
            a[i] = 1;
            if (c > 1){
                for (int j = 1; j <= c; j++)
                if (i != j){
                    a[j] = 101;
                    if (c > 2){
                        for (int k = 1; k <= c; k++)
                        if (i!=k && j!= k){
                            a[k] = 20101;
                            if (c > 3){
                                for (int l = 1; l <= c; l++)
                                if (i != l && j != l && k!= l){
                                    a[l] = 4010101;
                                    card();
                                }
                            }else card();
                        }
                    }else card();
                }
            }else card();
        }
    }
    printf("%d\n", sum);
}

D题:

题意:有一排药水,药水有自己的颜色(a,b...),每次混合相邻药水,会产生a*b的气体,位置不变,颜色变为(a+b) mod 100.最后求生成最小体积是多少

思路:用记忆化搜索即可,无注意点。

#include<iostream>
#include<cstring>
using namespace std;

struct aaa{
    int c;
    int v;
};

aaa f[500][500];
int n;

aaa dp(int l, int r){
    if (f[l][r].c < 100) return f[l][r];

    aaa t,mag1,mag2;
    t.v = (1 << 31) -1;
    for (int i = l; i < r; i++){
        mag1 = dp(l, i);
        mag2 = dp(i+1, r);
       // cout << l << " " << i << mag1.c << endl;
        //cout << i+1 << " " << r << mag2.c << endl;
        if (mag1.c*mag2.c+ f[l][i].v + f[i+1][r].v < t.v) {
            t.v = mag1.c*mag2.c + f[l][i].v + f[i+1][r].v;
            t.c = (mag1.c+mag2.c) %100;
        }
    }

    f[l][r] = t;
    return f[l][r];
}

int main(){

    while(cin >> n){
        for (int i = 1; i <= n; i++)
        for (int j = 1; j <= n; j++){
            f[i][j].c = 100;
            f[i][j].v = 0;
        }
        for (int i = 1; i <= n; i++)
        cin >> f[i][i].c;

        aaa t = dp(1,n);
        cout << t.v << endl;
    }
}

F题:

题意:一帮人参加聚会,要求他们的美丽度和强壮度都必须同时满足大于任何一个人,或者小于任何一个人(不能及格比A强,一个比A弱)最多邀请多少人,并输出顺序(任意)

思路:最长上升序列变形,记录前驱节点即可。

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;

struct aaa{
    int s;
    int b;
    int p;
    bool operator < (aaa a)const {
        if (s == a.s) return b > a.b;
        return s < a.s;
    }
}a[100010];

int d[100010];
int pos[100010]={0};
int pre[100010]={0};

int main(){
    int n;

    scanf("%d", &n);
    for (int i = 1; i <= n; i++){
        scanf("%d%d", &a[i].s, &a[i].b);
        a[i].p = i;
    }

    sort(a+1,a+n+1);

    int len = 1;
    pos[1] = 1;
    for (int i =2; i <= n; i++){
        if (a[i].b > a[pos[len]].b){
            pos[++len] = i;
            pre[i] = pos[len-1];
        }
        else{
            int l = 1; int r = len;
            while(l <= r){
                int m = (l +r) >> 1;
                if (a[pos[m]].b < a[i].b) l = m + 1;
                else r = m - 1;
            }
            pos[l] = i;
            pre[i] = pos[l-1];
        }
    }

    printf("%d\n", len);
    for (int i = pos[len]; i; i = pre[i])
        printf("%d ",a[i].p);
    cout << endl;
}



I题:

题意:求一个点集最少点的数目,要求满足一棵树的任意一条边都至少有一个端点在这个点集中。

思路:开始想的二分图,结果发现很容易反正。最后使用树形dp,简单解决。

#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include <algorithm>
using namespace std;

vector<int> f[100001];
int d[100001][2];
int n,x,y;

void treedp(int u, int rt){
    d[u][0] = 0;
    d[u][1] = 1;
    for (int i = 0; i < f[u].size(); i++){
        int temp = f[u][i];
        if (f[u][i] == rt) continue;

        treedp(temp, u);
        d[u][0] += d[temp][1];
        d[u][1] += min(d[temp][1], d[temp][0]);
    }
}

int main(){
    scanf("%d", &n);
    for (int i = 0; i < n; i++)
        f[i].clear();

    for (int i = 1; i < n; i++){
        scanf("%d%d", &x, &y);
        f[x-1].push_back(y-1);
        f[y-1].push_back(x-1);
    }

    treedp(0,-1);

    cout << min(d[0][0], d[0][1]) << endl;
}

E题:

题意:潜水员需要OL升氧气和NL升氮气,有若干组气体瓶o升氧气,n升氮气,w重量。最后要求至少满足OL和NL的情况下,潜水员最轻要背多少?

思路:01背包变形,f[i][j][k]代表到第i组气体瓶时j氧气k氮气最少的重量。开始想可以用2维优化,但是发现因为状态转移方程式加法,无法改变。

#include<iostream>
#include<cstdio>
#include<vector>
#include<cmath>
#include <algorithm>
using namespace std;

int test,OL,NL,n,ol,on;
int f[1001][22][80];
struct aaa{
    int o;
    int n;
    int w;
}a[1001];

int main(){
    int MAX= (1 <<31) -1;
    cin >> test;
    while(test--){
        cin >> OL >> NL;
        cin >> n;
        for (int i = 1; i <= n; i++)
        cin >> a[i].o >> a[i].n >> a[i].w;

        for (int j = OL; j >= 0; j--)
        for (int k = NL; k >= 0; k--){
            f[0][j][k] = MAX;
        }

        for (int i = 1; i <= n; i++){
        for (int j = OL; j >= 0; j--)
        for (int k = NL; k >= 0; k--){
            f[i][j][k] = f[i-1][j][k];
            ol = j + a[i].o > OL ? OL : j + a[i].o;
            on = k + a[i].n > NL ? NL : k + a[i].n;
            if ( j == 0 && k == 0 && f[i][ol][on] > a[i].w)
                f[i][ol][on] = a[i].w;
            if (f[i-1][j][k] < MAX && f[i-1][j][k] + a[i].w < f[i][ol][on])
                f[i][ol][on] = f[i-1][j][k] + a[i].w;
            else f[i][j][k] = f[i-1][j][k];
        }
        }
        cout << f[n][OL][NL] <<endl;
    }
}



【机械故障诊断】基于VMD分解与故障频率匹配的复合故障分离方法:MATLAB实现与智能运维应用 MATLAB 轴承复合故障分离|VMD分解与故障频率匹配 内容概要:通过结合变分模态分解(VMD)与理论故障频率匹配技术,实现对滚动轴承复合故障的自适应分离与精准诊断。该方法首先对振动信号进行稳健预处理,再通过参数寻优的VMD实现频带自适应分解,随后利用包络解调提取各模态的冲击周期,并基于轴承几何参数和转速计算理论故障频率。通过基频、倍频与边带的多证据匹配策略,将模态与外圈、内圈、滚动体、保持架等具体故障类型关联,支持共享模态的复合故障重构,最终输出各故障类型的独立分量与诊断结果。该方案提升了复杂工况下弱故障的识别能力与诊断的可解释性。; 适合人群:具备一定信号处理与机械故障诊断基础知识,从事工业设备状态监测、智能运维系统开发或相关算法研究的研发人员。; 使用场景及目标:①应用于电机、泵组、风电、轨道交通等领域的轴承复合故障诊断;②解决强弱故障共存、频率重叠导致的掩蔽问题,实现多故障的分离与识别;③为设备的智能运维、健康管理和剩余寿命预测提供可靠的故障分量数据与诊断依据; 阅读建议:此资源以MATLAB R2025b为实现平台,提供了完整的算法流程、代码示例与GUI界面。建议使用者在实践中重点关注参数搜索策略、多证据匹配的实现细节以及共享模态重构的逻辑,并结合实际工程数据进行验证和调优。 立即下载

相关推荐

基于.NET8开发,是一套开源、免费、跨平台、企业级在线考试软件,支持x64、x86、Arm64芯片架构的windows和linux操作系统,支持人大金仓、达梦、OceanBase数据库 等数据库

星期八在线考试系统,基于.NET8开发,是一套开源、免费、跨平台、企业级在线考试软件,支持x64、x86、Arm64芯片架构的windows和linux操作系统,支持人大金仓、达梦、OceanBase数据库 及 MySql、SqlServer、PostgreSql、SQLite 等数据库。

poj1939(计算几何)

题意:在宽度为1的管里射条光线最远射duo cha g

four_knife的专栏 727

TC8测试TCP-UNACCEPTABLE-04/006

TC8测试TCP-UNACCEPTABLE-04/006

线段树——poj1823

题目:http://poj.org/problem?id=1823 大意是住宾馆,有三种操作,1是从第i个房间要连续入住m个人;2是从第i个房间要连续退房i个人;3是查询最大连续空房间数 很简单的线段树 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; im

four_knife的专栏 710

通信行业面向5G微服务的接口测试自动化方案:持续集成中质量门禁与服务虚拟化协同的持续测试体系设计

通信行业面向5G微服务的接口测试自动化方案:持续集成中质量门禁与服务虚拟化协同的持续测试体系设计

PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制【仿真+计算书+参考文献】

内容概要:本文档系统性地整合了电力电子与控制系统仿真领域的丰富资源,聚焦于基于PSIM和Simulink平台的串联谐振半桥LLC开关电源建模与仿真,深入探讨PFM变频闭环控制策略的设计与实现。内容涵盖LLC谐振变换器的工作原理、关键参数设计、开环与闭环仿真模型构建、软开关技术(ZVS/ZCS)、恒压恒流双竞争控制机制以及调频控制等核心技术,配套提供完整的仿真文件、计算书和参考文献,有助于深入理解高频开关电源系统的动态响应特性与稳定性分析方法。此外,文档还汇集了大量拓展性仿真资源,涉及双向DC-DC变换器、PWM整流器、PFC电路、储能系统、微电网优化、DAB变换器、并网逆变器等多个方向,构成一套完整的科研与工程实践参考资料体系。; 适合人群:适用于电力电子、电气工程及其自动化等相关专业的高校本科生、研究生,以及从事开关电源设计、新能源系统开发、电力变换器研发等工作的工程技术人员。; 使用场景及目标:①深入学习LLC谐振变换器的拓扑结构与闭环控制原理;②掌握PSIM/Simulink在电力电子系统中的高精度建模与仿真技能;③为科研项目、学位论文或产品开发提供可复用的技术方案与代码基础;④深化对PFM控制、软启动过程、ZVS/ZCS实现机制及系统稳定性的理解; 阅读建议:建议结合文档中提供的仿真模型与计算书进行同步操作,优先剖析主电路拓扑与控制逻辑架构,再逐步开展参数调节与仿真验证实验,同时可参考所列相关资源拓展技术视野,提升综合设计能力。

poj1950(dfs)

题意:给你yi ge shu

four_knife的专栏 688

Windows开发工具环境管理:Git、Node.js、Python多版本与PATH冲突排查 - 配套实验资源

本资源是《Windows开发工具环境管理:Git、Node.js、Python多版本与PATH冲突排查》的配套实验工具,适用于 Windows PowerShell 5.1 和 PowerShell 7,帮助开发者排查 Git、Node.js、Python、Codex 等工具的多版本共存、PATH 配置异常及命令优先级冲突问题。 **资源包含两个 PowerShell 脚本:** 1. **Get-ToolchainInventory.ps1**:只读环境诊断工具,可列出开发工具的命令候选路径,检查 PATH 目录、重复条目及无效路径。不执行开发工具,也不修改系统配置。 2. **Invoke-PathPrecedenceLab.ps1**:PATH 优先级演示工具,在系统临时目录中生成测试命令,通过临时调整当前进程的 PATH,直观展示 Windows 命令查找与优先级规则。实验结束后自动恢复 PATH 并清理自身创建的临时文件。 **资源特点:** - 兼容 Windows PowerShell 5.1 和 PowerShell 7。 - 支持开发工具路径盘点与 PATH 冲突分析。 - 提供可重复的命令优先级实验。 - 不修改注册表、系统级或用户级环境变量。 - 不卸载软件、不安装依赖、不执行包管理器。 - 适合 Windows 开发环境排查、PowerShell 学习与技术教学。 **使用说明:** 下载后建议先审查脚本,再按照配套文章中的 PowerShell 命令运行。脚本已完成静态检查与打包,尚未经过 Windows 实机执行验证。 **安全提示:** 诊断结果可能包含个人或组织目录信息,公开分享前请脱敏。若受到 PowerShell 执行策略限制,应采用符合环境安全要求的授权方式运行,不建议全局关闭安全限制。

poj3393(模拟)

题意:好长。。。给出一个时间段,问在这个时间段zho

four_knife的专栏 674

Vue3项目实战:CKEditor5富文本编辑器从安装到隐藏不需要的功能

本文详细介绍了在Vue3项目中集成并深度定制CKEditor5富文本编辑器的完整流程。通过分析其模块化架构,指导开发者从标准构建出发,移除图片、表格等冗余插件,创建专属轻量构建,从而显著减小打包体积并提升用户体验。文章结合实战代码,涵盖了环境搭建、自定义构建配置、高级优化技巧等关键步骤。

weixin_29016833的博客 283

XILINX偶然加载不成功的问题原因及解决方法

本文为明德扬原创文章,转载请注明出处! 一、项目背景 明德扬(MDY)在2021年承担了多个基于XILINX芯片的研发项目,包括VPX网络透明传输项目(芯片为XC7K325T-2FBG900)、某高端测试仪项目(芯片为XCKU060-FFVA1156)、某网闸设备项目(芯片为XC7Z030-FBG676)等,另外,明德扬自研了基于XC7K325T-2FBG900和基于XC7K410T-2FBG900芯片的核心板,在XILINX研发领域拥有丰富的经验。即使拥有丰富经验和积累,每个新项目我们均...

6034

poj1201(图论)

poj1201 题意:给定闭区间[

four_knife的专栏 640

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 445

poj2031(最小生成树)

题意:给若干三为坐标的点,

four_knife的专栏 634

下水管道损坏检测数据集总结

下水管道损坏检测数据集包含 6708 张图像,为下水管道损坏情况的检测提供了丰富的数据基础。该数据集提供了 YOLO 和 VOC 两种常见的标注方式,方便不同需求的使用者进行模型训练和研究。

crz1336768325的博客 868

合并数组与非合并数组——SystemVerilog

合并型数组(packed): — 合并型数组可以实现连续的存储,赋值时不需要用 '{ }。 //合并型数组 bit [3] [7:0] b_pack // 表示3行 x 8列的数组,[3]是高维度(高维度),[7:0]是低维度(第一维) 数组中,数据排列为{b_pack[3],b_pack[2],b_pack[1],b_pack[0]},其中每个b_pack为8个bit; bit是二值逻辑,每位bit只占据1位。故24位bit只占据一个word(一般一个word为32bit)的存储空间

SummerXRT的博客 7638

线段树专题

hdu1166  http://acm.hdu.edu.cn/showproblem.php?pid=1166#include #define lson l, m, rt << 1 #define rson m+1, r, rt <<1 | 1 const int maxn = 55555; int sum[maxn << 2]; void pushup(int rt){ sum[r

four_knife的专栏 604

R语言分类变量的统计描述

三篇介绍了连续变量的统计描述的R语言相关函数,计算数值的相关统计指标。本文介绍分类变量的统计描述及如何在R语言中实现。 不同于连续变量,分类变量的统计描述主要是汇总分类变量各类别例数及百分比。 1、table()函数 ...

zsc943290710的博客 1万+

poj1905(计算几何+二分)

题目:有一条金属条,长度为l,受热会膨胀变长,但两边固定,suo yi

four_knife的专栏 603

通达信源码-金牛暴起

趋势1:=3*SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27))*100,5,1)-2*SMA(SMA((CLOSE-LLV(LOW,27))/(HHV(HIGH,27)-LLV(LOW,27))*100,5,1),3,1) AND SJTJ,DOTLINE,COLORGRAY;谷:=(((DD-LLV(DD,21))/(HHV(DD,21)-LLV(DD,21)))*(4))*(25);{0,25指高度};

qq_57222058的博客 3515

vue3:html2canvas+jspdf将页面以A4导出为PDF文件,解决内容截断+在分页处截断问题详细排查和解决教程(jsPDF + html2canvas A4分页截断、内容分页时存在截断)

html2canvas + jsPDF 解决内容截断问题,vue3 jspdf-html2canvas生成多页pdf防截断处理(包含代码),vue3解决html2canvas + jsPDF导出pdf分页内容截断问题,jsPDF + html2canvas A4分页截断 完美解决方案(含代码 + 案例),html页面导出pdf截断问题,html2canvas 与 jspdf 相结合生成 pdf 内容被截断的终极解决方案,提供html2canvas+jsPDF将HTML页面以A4纸方式导出为PDF后,内容分页

✅ 精选推荐文章 2243

poj3258(二分)

题意:一条长度为L得河道,有除了终点起点外有两颗shi zin个石子,

four_knife的专栏 597

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

poj3007(模拟)

题意:给出一个字符s,可以分割成两个字符s1和是s3,

four_knife的专栏 588

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

poj3096(模拟)

题目:D-pairs称为特殊字符,即给出一串字符判断

four_knife的专栏 572

poj3273(二分)

http://poj.org/problem?id=3273 题意:

four_knife的专栏 527
上一篇: 线段树专题
下一篇: poj3096(模拟)
four_knife
博客等级 码龄14年 5粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值