Я делал эту конкретную проблему AIBOHP и использовал подход dp, основанный на проверке концов подстроки длины i, начиная с 1. Хотя моя временная сложность в O (n^2) но пространство занимает слишком много, потому что я получаю RTE, если я объявляю его динамически или TLE, если я объявляю его глобальным статиком, который нужно уменьшить, потому что размер dp может быть 6100 * 6100. Любые предложения по оптимизации моего приведенного ниже кода для этой цели.Как оптимизировать пространство для SPOJ AIBOHP
Постановка задачи:
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;
}
Возможно, 'for (int i = 0; i <6101; i ++) memset (dp [i], 0, 6101 * sizeof (int));' вместо цикла double for. – Dukeling