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; }
相关文章推荐
- LightOJ1051 Good or Bad(DP)
- LightOJ 1051 Good or Bad (递推DP)
- LightOJ 1051 - Good or Bad(DP)
- LightOJ 1051 - Good or Bad(dp)
- LightOj-1051-dp
- lightoj1051 Good and Bad (dp)
- LightOJ 1051 - Good or Bad (dp)
- lightoj 1051 - Good or Bad DP
- 【LightOJ 1248】Dice (III)(概率DP)
- 解题报告:LightOJ_1406 状压DP
- Discovering Gold LightOJ - 1030 概率DP
- Lightoj 1031 - Easy Game DP
- lightOJ 1017 Brush (III) DP
- lightoj 1030 概率dp
- lightoj 1032 二进制的dp
- 【LightOJ 1122 + dp】
- LightOJ - 1079 Just another Robbery 概率 + dp
- lightoj 1086 状态压缩DP
- 51nod 1051 最大子矩阵和 (dp_good)
- [LightOJ1017]Brush (III)(二维dp)