我正在做这个特殊的问题AIBOHP并使用了 dp 方法,该方法基于检查从 1 开始的长度为 i 的子串的末端。虽然我的时间复杂度在 O(n^2) 时很好,但空间占用太多,因此我如果我动态地声明它,我会得到 RTE,或者如果我将它声明为需要减少的全局静态,因为 dp 大小可以是 6100*6100 ,我会得到 RTE。任何建议如何为此目的优化我的以下代码。
问题陈述是:
He now asks the doctors to insert the minimum number of characters needed to make S a palindrome. Help the doctors accomplish this task.
For instance, if S = "fft", the doctors should change the string to "tfft", adding only 1 character.
我的代码是:
static int dp[6101][6101];
main()
{
int tc;
scanf("%d",&tc);
while(tc--)
{
char s[6102];
scanf("%s",s);
int len=strlen(s);
memset(dp,0,sizeof dp);
for(int i=1;i<len;i++)
for(int j=0,k=i;k<len;k++,j++)
dp[j][k]=(s[j]==s[k])?dp[j+1][k-1]:min(dp[j][k-1],dp[j+1][k])+1;
printf("%d\n",dp[0][len-1]);
}
return 0;
}