玄学问题
查看原帖
玄学问题
207812
Chouquet楼主2020/9/9 21:52

为什么不初始化f为无穷大就能AC:

#include <cstdio>
#include <cstring>
#define min(a,b) ((a)<(b)?(a):(b))
char s[1003];
int len,f[1003][1003];
int main(){
    scanf("%s",s+1),len=strlen(s+1);
    for(int i=1;i<=n;i++) f[i][i]=0;
    for(int i=len-1;i>=1;i--){
        for(int j=i+1;j<=len;j++){
            if(s[i]==s[j])
            	f[i][j]=f[i+1][j-1];
            else
            	f[i][j]=min(f[i+1][j],f[i][j-1])+1;
        }
    }
    printf("%d\n",f[1][len]);
    return 0;
}

而将f初始值设为无穷大就只有60pts?

#include <cstdio>
#include <cstring>
#define min(a,b) ((a)<(b)?(a):(b))
char s[1003];
int len,f[1003][1003];
int main(){
    scanf("%s",s+1),len=strlen(s+1);
    memset(f,0x3f,sizeof f);//多了这一句
    for(int i=1;i<=len;i++) f[i][i]=0;
    for(int i=len-1;i>=1;i--){
        for(int j=i+1;j<=len;j++){
            if(s[i]==s[j])
            	f[i][j]=f[i+1][j-1];
            else
            	f[i][j]=min(f[i+1][j],f[i][j-1])+1;
        }
    }
    printf("%d\n",f[1][len]);
    return 0;
}
2020/9/9 21:52
加载中...