在求最长公共子序列问题中,在使用动态规划的填表法时,我们要用两个for循环来初始化这个表,
int c[MAXLEN][MAXLEN]; //记录子问题XiYj的解
//当x序列为空时,最长公共子序列长度为0 for (int j = 0; j <= n; j++) c[0][j] = 0; //当y序列为空时,最长公共子序列长度为0 for (int i = 0; i <= m; i++) c[i][0] = 0;
而我们可以使用memset函数来将表初始化为0,需要头文件<cstring>
int c[MAXLEN][MAXLEN]; //记录子问题XiYj的解 memset(c, 0, sizeof(c)); //初始化
使用memset函数时,要注意以下几点:
- memset的正规用法是只能用来初始化char类型的数组的,也就是说,它只接受0x00-0xFF的赋值
- 因为char是1字节,memset是按照字节赋值的,相当于把每个字节都设为那个数,所以char型的数组可赋任意值;
- 而在给char型以外的数组赋值时,只能初始化为0或者-1。
参考链接:https://www.cnblogs.com/yhlboke-1992/p/9292877.html
https://blog.csdn.net/lyj2014211626/article/details/65481630