【DFS】I Like Matrix!

本文介绍了一种使用深度优先搜索算法解决矩阵可达位置计数问题的方法。在一个n*m的矩阵中,从(1,1)出发,通过k种移动方式,可以到达多少个位置。通过递归地应用所有可能的移动方式,程序有效地遍历了所有可达位置。

I Like Matrix!

题目

给定 k 种移动方式:从 (i,j) 移动到 (i + xk ,j + yk )(xk ,yk > 0)。询问在一个 n ∗ m 的矩阵中,从 (1,1) 出发,可以到达多少个位置。

输入

第一行包含三个整数 n,m 和 k。
之后 k 行每行包含两个 xi 和 yi 。

输出

共一行包含一个整数 ans,表示可以到达的位置个数。

输入样例

5 5 2
2 1
1 3

输出样例

5

注意

对于 100% 的数据:n,m ≤ 100,k ≤ 10

解题思路

其实就是深度优先搜索,来每次加一种方法搜下去即可.

程序如下

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int n,m,k,xi[1001],yi[1001],ans;
bool a[1001][101];
void dfs(int x,int y)
{
	
	if(x>n||y>m) return ;//判断是否出界
	if(a[x][y]) return ;//判断是否已访问过
	a[x][y]=true;//标记
	ans++;//统计
	for(int i=1;i<=k;++i)//枚举k种方式
	{
		dfs(x+xi[i],y+yi[i]);//不断建图
	}
}
int main()
{
	scanf("%d%d%d",&n,&m,&k);
	for(int i=1;i<=k;++i)
	{
		scanf("%d%d",&xi[i],&yi[i]);
	}
	dfs(1,1);//题目开始是这样的
	printf("%d",ans);
	return 0;
} 
import serial import numpy as np import matplotlib.pyplot as plt import matplotlib.animation as animation import time from matplotlib.patches import Rectangle, Circle from pylab import mpl mpl.rcParams["font.sans-serif"] = ["SimHei"] mpl.rcParams["axes.unicode_minus"] = False class EggCounter: def __init__(self): self.grid_size = (8, 8) self.cover_width = 100 # 宽度100mm self.cell_size = self.cover_width / 8 self.background = None self.bg_alpha = 0.1 self.next_id = 0 self.tracked_eggs = [] # 跟踪的鸡蛋对象 self.max_missed = 5 self.depth_threshold = 15 self.min_points = 3 self.exit_threshold = 30 # 右侧出口触发位置(mm),传送方向从左到右 self.total_count = 0 self.speed_estimation = [] # 用于速度估计的历史位置 def _grid_to_physical(self, i, j): """将网格坐标转换为物理坐标(传送方向从左到右)""" x = (j - 3.5) * self.cell_size # X: 传送方向(从左到右) y = (i - 3.5) * self.cell_size # Y: 宽度方向(垂直于传送) return x, y def _cluster_points(self, mask): """对前景点进行聚类并返回中心坐标""" clusters = [] visited = np.zeros_like(mask, dtype=bool) def dfs(i, j, points): stack = [(i, j)] while stack: x, y = stack.pop() if visited[x, y] or not mask[x, y]: continue visited[x, y] = True points.append((x, y)) for dx in (-1, 0, 1): for dy in (-1, 0, 1): nx, ny = x+dx, y+dy if 0 <= nx < 8 and 0 <= ny < 8: stack.append((nx, ny)) return points for i in range(8): for j in range(8): if mask[i, j] and not visited[i, j]: cluster = dfs(i, j, []) if len(cluster) >= self.min_points: centers = [self._grid_to_physical(*p) for p in cluster] cx = np.mean([c[0] for c in centers]) cy = np.mean([c[1] for c in centers]) clusters.append((cx, cy)) return clusters def _update_background(self, frame): """动态更新背景模型""" if self.background is None: self.background = frame.copy() else: foreground = (self.background - frame) > self.depth_threshold self.background[~foreground] = ( (1 - self.bg_alpha) * self.background[~foreground] + self.bg_alpha * frame[~foreground] ) def _match_and_track(self, current_eggs): """匹配当前帧检测到的鸡蛋与跟踪目标""" # 如果没有跟踪目标,全部初始化为新目标 if not self.tracked_eggs: for pos in current_eggs: self.tracked_eggs.append({ 'id': self.next_id, 'pos': pos, 'history': [pos], # 位置历史用于速度估计 'counted': False, 'missed': 0 }) self.next_id += 1 return # 计算目标间的距离成本矩阵 cost_matrix = np.zeros((len(self.tracked_eggs), len(current_eggs))) for i, egg in enumerate(self.tracked_eggs): for j, pos in enumerate(current_eggs): # 使用欧氏距离作为匹配成本 dist = np.sqrt((egg['pos'][0]-pos[0])**2 + (egg['pos'][1]-pos[1])**2) cost_matrix[i, j] = dist # 使用匈牙利算法进行匹配 row_idx, col_idx = linear_sum_assignment(cost_matrix) # 更新匹配的目标 matched_targets = set() matched_detections = set() for i, j in zip(row_idx, col_idx): if cost_matrix[i, j] < 20: # 距离阈值20mm self.tracked_eggs[i]['pos'] = current_eggs[j] self.tracked_eggs[i]['history'].append(current_eggs[j]) if len(self.tracked_eggs[i]['history']) > 5: self.tracked_eggs[i]['history'].pop(0) self.tracked_eggs[i]['missed'] = 0 matched_targets.add(i) matched_detections.add(j) # 处理未匹配的目标(丢失) for i, egg in enumerate(self.tracked_eggs): if i not in matched_targets: egg['missed'] += 1 # 添加新的检测目标 for j, pos in enumerate(current_eggs): if j not in matched_detections: self.tracked_eggs.append({ 'id': self.next_id, 'pos': pos, 'history': [pos], 'counted': False, 'missed': 0 }) self.next_id += 1 def process_frame(self, frame): """ 处理一帧深度数据并返回检测到的鸡蛋位置 :param frame: 8x8深度矩阵 (单位:mm) :return: (当前检测到的鸡蛋位置, 总计数) """ # 1. 更新背景模型 self._update_background(frame) # 2. 前景检测 (鸡蛋深度小于背景) foreground = (self.background - frame) > self.depth_threshold # 3. 聚类检测到的鸡蛋 current_eggs = self._cluster_points(foreground) # 4. 目标跟踪与匹配 self._match_and_track(current_eggs) # 5. 计数逻辑(鸡蛋从右侧离开时计数) for egg in self.tracked_eggs.copy(): # 如果鸡蛋在出口区域且未计数 if not egg['counted'] and egg['pos'][0] >= self.exit_threshold: self.total_count += 1 egg['counted'] = True # 标记为已计数但继续跟踪直到离开视野 # 移出检测区域(右侧太远或宽度方向超出范围) if abs(egg['pos'][1]) > 50 or egg['pos'][0] > 60: self.tracked_eggs.remove(egg) return [egg['pos'] for egg in self.tracked_eggs if not egg['counted']], self.total_count def init_serial(port='COM12', baudrate=115200): """初始化串口连接""" return serial.Serial(port, baudrate, timeout=1) def create_blackwhite_colormap(): """创建黑白渐变色图""" colors = [(0.95, 0.95, 0.95), (0, 0, 0)] # 浅灰到黑 return plt.cm.colors.LinearSegmentedColormap.from_list('bw', colors, N=256) def init_plot(): """初始化深度图显示(传送方向从左到右)""" fig = plt.figure(figsize=(14, 7)) fig.suptitle('VL53L5CX 鸡蛋计数系统(传送方向:左→右)', fontsize=16) # 深度图区域 ax1 = fig.add_subplot(121) cmap = create_blackwhite_colormap() img = ax1.imshow(np.zeros((8,8)), cmap=cmap, vmin=0, vmax=500) plt.colorbar(img, label='距离(mm)', ax=ax1) ax1.set_title('8x8 深度图') ax1.set_xlabel('传送方向(左→右)') ax1.set_ylabel('宽度方向') # 添加传送带表示(红色表示出口) ax1.add_patch(Rectangle([-0.5, -0.5], 8, 8, fill=False, edgecolor='red', linestyle='--')) ax1.text(7.5, 3.5, '→', color='red', fontsize=20, ha='center') # 传送方向箭头 # 鸡蛋位置可视化区域 ax2 = fig.add_subplot(122) ax2.set_xlim(-60, 60) ax2.set_ylim(-60, 60) ax2.set_title('鸡蛋位置检测') ax2.set_xlabel('传送方向(mm) (左→右)') ax2.set_ylabel('宽度方向(mm)') # 添加检测区域和计数线 ax2.add_patch(Rectangle([-50, -50], 100, 100, fill=False, edgecolor='blue')) ax2.axvline(x=30, color='r', linestyle='--', alpha=0.7) # 出口计数线 ax2.text(32, -45, '计数线', color='r', rotation=90) # 添加传送方向箭头 ax2.arrow(-40, 50, 70, 0, head_width=5, head_length=5, fc='r', ec='r') ax2.text(0, 55, '传送方向', color='r', ha='center') # 鸡蛋计数显示 count_text = ax2.text(0, 45, '鸡蛋计数: 0', ha='center', va='center', fontsize=24, color='green', bbox=dict(facecolor='white', alpha=0.8)) # 帧率显示 fps_text = ax2.text(0, -45, 'FPS: 0.0', ha='center', va='center', fontsize=12, color='blue') # 当前跟踪目标显示 track_text = ax2.text(40, -45, '跟踪目标: 0', ha='left', va='center', fontsize=12, color='purple') # 鸡蛋位置点容器 egg_points = ax2.scatter([], [], s=100, c='red', edgecolors='black', alpha=0.7) return fig, img, ax2, count_text, fps_text, track_text, egg_points def update_frame(frame, ser, img, ax, count_text, fps_text, track_text, egg_points, counter, last_time): """更新深度图帧并处理鸡蛋计数(传送方向从左到右)""" current_time = time.time() fps = 1 / (current_time - last_time[0]) if current_time != last_time[0] else 0 last_time[0] = current_time try: # 读取串口数据 data = ser.readline().decode('utf-8').strip() if data: distances = list(map(float, data.split(','))) if len(distances) == 64: depth_map = np.array(distances).reshape(8,8) # 更新深度图显示 img.set_array(depth_map) img.autoscale() # 鸡蛋检测与计数 eggs, total_count = counter.process_frame(depth_map) # 更新鸡蛋位置散点图 if eggs: x_pos = [egg[0] for egg in eggs] y_pos = [egg[1] for egg in eggs] egg_points.set_offsets(np.column_stack([x_pos, y_pos])) else: egg_points.set_offsets([]) # 更新计数显示 count_text.set_text(f'鸡蛋计数: {total_count}') fps_text.set_text(f'FPS: {fps:.1f}') track_text.set_text(f'跟踪目标: {len(counter.tracked_eggs)}') except Exception as e: print(f"Error: {e}") return img, egg_points, count_text, fps_text, track_text def main(): ser = init_serial() counter = EggCounter() fig, img, ax2, count_text, fps_text, track_text, egg_points = init_plot() last_time = [time.time()] ani = animation.FuncAnimation( fig, update_frame, fargs=(ser, img, ax2, count_text, fps_text, track_text, egg_points, counter, last_time), interval=50, blit=True, save_count=1000 ) plt.tight_layout() plt.subplots_adjust(top=0.9) plt.show() ser.close() if __name__ == "__main__": from scipy.optimize import linear_sum_assignment # 确保导入 main()
09-11
import numpy as np from scipy.integrate import solve_ivp from itertools import product # ==== 多状态元件类 ==== class MultiStateComponent: def __init__(self, name, num_states, performance_matrix): """ 多状态元件类 :param name: 元件名称 :param num_states: 元件状态数 :param performance_matrix: 性能矩阵,维度为V维向量表示元件在状态下的性能水平 """ self.name = name self.num_states = num_states self.performance = performance_matrix # V维向量表示元件在状态下的性能水平 self.transition_matrix = None # 转移率矩阵初始化 self.failure_rates = {} # 故障率字典 {(j, j'): λ} self.repair_rates = {} # 修复率字典 {(j, j'): μ} self.current_state = 1 # 初始状态默认为1 self.original_failure_rates = {} # 保存原始故障率 self.original_repair_rates = {} # 保存原始修复率 def set_transition_rates(self, failure_rates, repair_rates): """ 设置转移率参数(完全按照文档格式) :param failure_rates: 故障率字典 {(current_state, next_state): value} :param repair_rates: 修复率字典 {(current_state, next_state): value} """ self.original_failure_rates = failure_rates.copy() self.original_repair_rates = repair_rates.copy() self.failure_rates = failure_rates self.repair_rates = repair_rates self._build_transition_matrix() def _build_transition_matrix(self): # 初始化n×n零矩阵 q = [[0.0] * self.num_states for _ in range(self.num_states)] # 填充非对角线元素 # 状态恶化(j < i) for (i, j), rate in failure_rates.items(): if i != j and i < num_states and j < i: q[i][j] = rate # 状态改善(j > i) for (i, j), rate in repair_rates.items(): if i != j and i < num_states and j > i: q[i][j] = rate # 计算对角线元素(使每行和为0) for i in range(self.num_states): row_sum = sum(q[i]) q[i][i] = -row_sum return q def state_probabilities(transition_matrix, initial_probs, t_max, t_points): """ 计算状态概率 :param t_max: 时间范围 (t0, tf) :param initial_prob: 初始概率向量 [p1(0), p2(0), ..., pm(0)] :return: 时间点和对应的概率 """ q = np.array(transition_matrix) initial_probs = np.array([0.0, 0.0, 1.0]) t_max = 1000 t_points = 50000 t, probs = solve_ctmc_probabilities(transition_matrix, initial_probs, t_max, t_points) def dpi_dt(pi, t): return np.dot(pi, q) t = np.linspace(0, t_max, t_points) probs = odeint(dpi_dt, initial_probs, t) return t, probs # ==== 综合能源系统类 ==== class IntegratedEnergySystem: def __init__(self, components): self.components = components self.dependencies = {'positive': [], 'negative': []} self.component_connections = {} # 存储元件之间的连接关系 {(comp1, comp2): 'series'/'parallel'} self.connection_graph = {} # 存储连接图,用于系统性能计算 def add_dependency(self, comp_from, comp_to, dep_type): self.dependencies[dep_type].append((comp_from, comp_to)) def set_component_connection(self, comp1, comp2, connection_type): """ 设置两个元件之间的连接关系 :param comp1: 第一个元件 :param comp2: 第二个元件 :param connection_type: 连接类型 ('series' 或 'parallel') """ # 存储连接关系 self.component_connections[(comp1, comp2)] = connection_type # 根据连接类型设置相应的相依关系 if connection_type == 'series': # 串联结构下设置负相依关系 self.add_dependency(comp1, comp2, "negative") print(f"设置负相依关系: {comp1.name} -> {comp2.name} (串联结构)") elif connection_type == 'parallel': # 并联结构下设置正相依关系 self.add_dependency(comp1, comp2, "positive") print(f"设置正相依关系: {comp1.name} -> {comp2.name} (并联结构)") # 更新连接图 self._update_connection_graph() def _update_connection_graph(self): """ 更新连接图,用于系统性能计算 """ self.connection_graph = {} for (comp1, comp2), conn_type in self.component_connections.items(): if comp1 not in self.connection_graph: self.connection_graph[comp1] = {} if comp2 not in self.connection_graph: self.connection_graph[comp2] = {} self.connection_graph[comp1][comp2] = conn_type self.connection_graph[comp2][comp1] = conn_type def apply_dependencies(self, failed_component): # 正相依:故障率上升,修复率下降 for comp_from, comp_to in self.dependencies['positive']: if comp_from == failed_component: print(f"正相依: {comp_to.name}的故障率和修复率将发生变化") new_failure_rate = float(input(f"请输入新的故障率(上升)(原值:{list(comp_to.original_failure_rates.values())[0]}):")) new_repair_rate = float(input(f"请输入新的修复率(下降)(原值:{list(comp_to.original_repair_rates.values())[0]}):")) comp_to.failure_rates = {(1, 2): new_failure_rate} comp_to.repair_rates = {(2, 1): new_repair_rate} comp_to.set_transition_rates(comp_to.failure_rates, comp_to.repair_rates) print(f"已更新 {comp_to.name} 的故障率与修复率") # 负相依:故障率下降,修复率上升 for comp_from, comp_to in self.dependencies['negative']: if comp_from == failed_component: print(f"负相依: {comp_to.name}的故障率和修复率将发生变化") new_failure_rate = float(input(f"请输入新的故障率(下降)(原值:{list(comp_to.original_failure_rates.values())[0]}):")) new_repair_rate = float(input(f"请输入新的修复率(上升)(原值:{list(comp_to.original_repair_rates.values())[0]}):")) comp_to.failure_rates = {(1, 2): new_failure_rate} comp_to.repair_rates = {(2, 1): new_repair_rate} comp_to.set_transition_rates(comp_to.failure_rates, comp_to.repair_rates) print(f"已更新 {comp_to.name} 的故障率与修复率") def system_performance(self, states): """ 计算系统性能(基于元件间的连接关系) :param states: 各元件的当前状态 :return: 系统性能向量 """ # 获取各元件的性能向量 perf_vectors = {} for i, comp in enumerate(self.components): state_idx = states[i] - 1 perf_vectors[comp] = comp.performance[state_idx] # 如果没有设置任何连接关系,默认使用串联 if not self.component_connections: print("警告:未设置任何连接关系,默认使用串联计算") return np.min(list(perf_vectors.values()), axis=0) # 计算系统性能(简化处理:只考虑两两连接关系) # 这里使用简化的方法,实际应用中可能需要更复杂的网络分析 sys_perf = np.zeros_like(list(perf_vectors.values())[0]) # 找出所有连接关系 connections = list(self.component_connections.items()) # 如果没有连接关系,返回默认性能 if not connections: return sys_perf # 处理第一个连接 (comp1, comp2), conn_type = connections[0] if conn_type == 'series': sys_perf = np.minimum(perf_vectors[comp1], perf_vectors[comp2]) else: # parallel sys_perf = perf_vectors[comp1] + perf_vectors[comp2] # 处理剩余的连接 for (comp1, comp2), conn_type in connections[1:]: if conn_type == 'series': sys_perf = np.minimum(sys_perf, np.minimum(perf_vectors[comp1], perf_vectors[comp2])) else: # parallel sys_perf = sys_perf + perf_vectors[comp1] + perf_vectors[comp2] return sys_perf def system_lz_performance(self, t_span=(0, 100)): """ 使用Lz变换计算系统性能的概率分布(基于元件间的连接关系) :param t_span: 求解时间范围 :return: 系统性能的概率分布字典 {性能向量: 概率} """ lz_list = [LzTransform.lz_function(comp, t_span) for comp in self.components] # 如果没有设置任何连接关系,默认使用串联 if not self.component_connections: print("警告:未设置任何连接关系,默认使用串联计算") lz_system = LzTransform.combine_series(lz_list) print("系统Lz性能分布:", lz_system) return lz_system # 计算系统性能分布(简化处理:只考虑两两连接关系) # 这里使用简化的方法,实际应用中可能需要更复杂的网络分析 combined_lz = {} # 找出所有连接关系 connections = list(self.component_connections.items()) # 处理第一个连接 (comp1, comp2), conn_type = connections[0] idx1 = self.components.index(comp1) idx2 = self.components.index(comp2) if conn_type == 'series': # 串联组合 for (perf1, prob1), (perf2, prob2) in product(lz_list[idx1].items(), lz_list[idx2].items()): min_perf = tuple(np.minimum(perf1, perf2)) prob = prob1 * prob2 combined_lz[min_perf] = combined_lz.get(min_perf, 0) + prob else: # parallel # 并联组合 for (perf1, prob1), (perf2, prob2) in product(lz_list[idx1].items(), lz_list[idx2].items()): sum_perf = tuple(np.array(perf1) + np.array(perf2)) prob = prob1 * prob2 combined_lz[sum_perf] = combined_lz.get(sum_perf, 0) + prob # 处理剩余的连接 for i, ((comp1, comp2), conn_type) in enumerate(connections[1:], 1): idx1 = self.components.index(comp1) idx2 = self.components.index(comp2) temp_lz = {} if conn_type == 'series': # 串联组合 for (perf1, prob1), (perf2, prob2) in product(lz_list[idx1].items(), lz_list[idx2].items()): min_perf = tuple(np.minimum(perf1, perf2)) prob = prob1 * prob2 temp_lz[min_perf] = temp_lz.get(min_perf, 0) + prob else: # parallel # 并联组合 for (perf1, prob1), (perf2, prob2) in product(lz_list[idx1].items(), lz_list[idx2].items()): sum_perf = tuple(np.array(perf1) + np.array(perf2)) prob = prob1 * prob2 temp_lz[sum_perf] = temp_lz.get(sum_perf, 0) + prob # 与之前的结果组合 new_combined_lz = {} if i % 2 == 0: # 与之前的结果串联 for (perf1, prob1), (perf2, prob2) in product(combined_lz.items(), temp_lz.items()): min_perf = tuple(np.minimum(perf1, perf2)) prob = prob1 * prob2 new_combined_lz[min_perf] = new_combined_lz.get(min_perf, 0) + prob else: # 与之前的结果并联 for (perf1, prob1), (perf2, prob2) in product(combined_lz.items(), temp_lz.items()): sum_perf = tuple(np.array(perf1) + np.array(perf2)) prob = prob1 * prob2 new_combined_lz[sum_perf] = new_combined_lz.get(sum_perf, 0) + prob combined_lz = new_combined_lz print("系统Lz性能分布:", combined_lz) return combined_lz # ==== Lz变换模块 ==== class LzTransform: """ Lz变换模块:用于基于状态概率与性能向量计算系统可靠性指标 不影响原有系统结构与相依逻辑 """ @staticmethod def lz_function(component: MultiStateComponent, t_span=(0, 100)): t, prob = component.state_probabilities(t_span, [1.0] + [0.0]*(component.num_states-1)) final_prob = prob[:, -1] lz = {} for i in range(component.num_states): perf = tuple(component.performance[i]) lz[perf] = final_prob[i] return lz @staticmethod def combine_series(lz_list): combined = {} for prod in product(*[lz.items() for lz in lz_list]): perf_vecs, probs = zip(*prod) min_perf = tuple(np.min(perf_vecs, axis=0)) prob = np.prod(probs) combined[min_perf] = combined.get(min_perf, 0) + prob return combined @staticmethod def combine_parallel(lz_list): combined = {} for prod in product(*[lz.items() for lz in lz_list]): perf_vecs, probs = zip(*prod) sum_perf = tuple(np.sum(perf_vecs, axis=0)) prob = np.prod(probs) combined[sum_perf] = combined.get(sum_perf, 0) + prob return combined @staticmethod def system_availability(lz_result, demand): return sum(p for perf, p in lz_result.items() if np.all(np.array(perf) >= demand)) @staticmethod def expected_performance(lz_result): return sum(np.array(perf) * p for perf, p in lz_result.items()) # ==== 示例用法 ==== if __name__ == "__main__": # 创建组件 A = MultiStateComponent("A", 2, np.array([[100], [50]])) B = MultiStateComponent("B", 2, np.array([[100], [30]])) C = MultiStateComponent("C", 2, np.array([[100], [40]])) # 设置转移率 A.set_transition_rates({(1, 2): 0.1}, {(2, 1): 0.2}) B.set_transition_rates({(1, 2): 0.15}, {(2, 1): 0.25}) C.set_transition_rates({(1, 2): 0.1}, {(2, 1): 0.2}) # 创建系统 system = IntegratedEnergySystem([A, B, C]) # 单独设置元件之间的连接关系 system.set_component_connection(A, B, "series") # A和B串联 system.set_component_connection(B, C, "parallel") # B和C并联 system.set_component_connection(A, C, "series") # A和C串联 # 触发相依关系(交互式输入) system.apply_dependencies(A) # 瞬时性能(基于元件间的连接关系) states = [1, 1, 1] system_performance = system.system_performance(states) print(f"瞬时系统性能: {system_performance}") # Lz变换性能分布(基于元件间的连接关系) lz_result = system.system_lz_performance() demand = np.array([50]) availability = LzTransform.system_availability(lz_result, demand) expected = LzTransform.expected_performance(lz_result) print("系统可用度:", availability) print("系统期望性能:", expected)
10-30
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值