您的位置:首页 > 其它

Lightoj 1051 DP

2013-10-26 15:59 155 查看
AC代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int C,num=0;
int n,a[55],f1[55][4],f2[55][6];
char s[55];

int OK(char x)
{
return x=='A'||x=='E'||x=='I'||x=='O'||x=='U';
}

void DP()
{
int i,j;
memset(f1,0,sizeof(f1));
memset(f2,0,sizeof(f2));
f1[0][0]=f2[0][0]=1;
for(i=1;i<=n;i++)
{
for(j=0;j<=2;j++) if(f1[i-1][j])
{
if(a[i]==2||a[i]==1) f2[i][1]=1;
if(a[i]==2||a[i]==0) f1[i][j+1]=1;
}
for(j=0;j<=4;j++) if(f2[i-1][j])
{
if(a[i]==2||a[i]==0) f1[i][1]=1;
if(a[i]==2||a[i]==1) f2[i][j+1]=1;
}
}
int bad=0,good=0;
for(i=0;i<=2;i++) if(f1
[i]) good=1;
for(i=0;i<=4;i++) if(f2
[i]) good=1;
for(i=1;i<=n;i++) if(f1[i][3]||f2[i][5]) bad=1;
if(good&&bad) puts("MIXED");
else if(good) puts("GOOD");
else puts("BAD");
}

int main()
{
for(scanf("%d",&C);C--;)
{
scanf("%s",s+1);
n=strlen(s+1);
int i;
for(i=1;i<=n;i++)
{
if(s[i]=='?') a[i]=2;
else if(OK(s[i])) a[i]=0;
else a[i]=1;
}
printf("Case %d: ",++num);
DP();
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: