poj 2185 Milking Grid (最小覆盖矩阵)

来源:互联网 发布:广联达预算软件全套 编辑:程序博客网 时间:2024/06/14 18:29

给一个字符矩阵,求最小覆盖矩阵的面积。

有一个结论:最小覆盖子串(串尾多一小段时,用前缀覆盖)长度为n-next[n]n-pre[n]),n为串长。


#include<cstdio>#include<cstring>char dic[10010][101];char temp[105];int suc[105];int nex[10010];int main(){int r,c;while(scanf("%d%d",&r,&c)!=EOF){memset(suc,0,sizeof(suc));for(int i=0;i<r;i++){scanf("%s",dic[i]);strcpy(temp,dic[i]);for(int j=c-1;j>0;j--){temp[j]=0;int x,y;for(y=0,x=0;dic[i][y]!='\0';x++,y++){if(!temp[x])x=0;if(dic[i][y]!=temp[x])break;}if(dic[i][y]=='\0')suc[j]++;}}int max=c;for(int i=0;i<c;i++){if(suc[i]==r){max=i;break;}}for(int i=0;i<r;i++){dic[i][max]=0;}int i=-1,j=0;memset(nex,0,sizeof(nex));nex[0]=-1;while(j<r){if(i==-1||!strcmp(dic[i],dic[j])){i++;j++;nex[j]=i;}elsei=nex[i];}printf("%d\n",(r-nex[r])*max);}return 0;}


0 0
原创粉丝点击