这个代码有一点没看懂 想知道是什么意思捏

P1435 [IOI2000] 回文字串 / [蓝桥杯 2016 省] 密码脱落 - 洛谷 | 计算机科学教育新生态 https://www.luogu.com.cn/problem/P1435


#include<bits/stdc++.h>
using namespace std;
const int N=1e3+5;
char a[N],b[N];
int f[N][N],n;
int main()
{
    scanf("%s",a+1);//为啥不读入a捏
    n=strlen(a+1);//这里的n是谁的长度 为啥不是strlen(a+1)
    for(int i=1;i<=n;i++)b[i]=a[n-i+1];
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++){
                if(a[i]==b[j])f[i][j]=f[i-1][j-1]+1;
                f[i][j]=max(f[i][j],max(f[i][j-1],f[i-1][j]));//不太明白
            }
    printf("%d",n-f[n][n]);
}

1.为啥不读入a?
如果读入a,则是从首地址a[0]开始存入字符串,还有就是下面for循环遍历是从a[1]开始的,所以此处读入a+1,输入直接从a[1]开始存即可。
2.这里的n是谁的长度?
就是上一句读入字符串的长度
3.f[i][j]=max(f[i][j],max(f[i][j-1],f[i-1][j]));//不太明白
关于这一句,就是找到最多(长)的,然后n-f[n][n],拿总的长度减去最多(长)的就是最少(短)的。

以上仅供参考,如有任何疑问,可以评论回复,看到即回。
希望对题主有所帮助!可以的话,点个采纳!