Coursera :自动评分器的未知信号 11

Coursera : unknown signal 11 by autograder

本文关键字:未知 信号 Coursera      更新时间:2023-10-16

我有这段代码用于最长的常见子序列问题(我是通过动态规划方法完成的(

但是我被 Coursera 自动评分器错误(失败案例 #6/37:未知信号 11(使用时间:0.00/1.00,使用的内存:9166848/536870912.((

#include  使用命名空间标准; int max(int a,int b( { 返回 a>b?a:b; } int common_sub_sequence(vector&arr1, vector&arr2, int n, int m( { int ch[m + 1][n + 1]={0}; for (int i = 0; i <= n; i++( { for (int j = 0; j <= m; j++( { if (i == 0 || j == 0( { ch[i][j] = 0; } 否则如果 (arr1[i - 1] == arr2[j - 1]( { ch[i][j] = ch[i - 1][j - 1] + 1; } 还 { ch[i][j] = max(ch[i - 1][j], ch[i][j - 1](; } } } 返回 ch[n][m]; } int main(( { 整数 n=0, m=0;>>; vectorarr1(n,0(; for (int i = 0; i <n;>> arr1[i]; } cin>> m; vectorarr2(m,0(; for (int j = 0; j <m;>> arr2[j]; } cout <<common_sub_sequence( arr1 , arr2, n, m( <<""; 返回 0; }

如何删除该错误???

有两个问题可能导致未定义的行为;

首先,你创建一个大小为ch[m+1][n+1]的数组,但外部循环是for (i=0; i<=n; i++),访问ch[i][j]。大小为m+1,但您迭代直到i<=n(注意n-m- 差异(。所以应该是

int ch[n+1][m+1]`

其次,创建一个可变长度数组作为局部变量。如果完全支持,它将在"堆栈"上创建,并且可能会超过m和n的大值的堆栈限制。你可以用

std::vector<std::vector<int> > ch(n+1, std::vector<int>(m+1));