LightOJ1051 Good or Bad(DP)
2024-10-18 00:17:07
这题感觉做法应该挺多吧,数据规模那么小。
我用DP乱搞了。。
dp0[i][j]表示字符串前i位能否组成末尾有连续j个元音字母
dp1[i][j]表示字符串前i位能否组成末尾有连续j个辅音字母
- 我的转移方案是尽量不要出现BAD字符串。
- 如果最后转移不过去那就说明一定会出现BAD字符串,如果可以转移到最后那就说明字符串可以出现GOOD的情况。
- 另外,在转移过程中可以顺便得出字符串能不能出现BAD的情况。
转移写起来还挺棘手的。。
#include<cstdio>
#include<cstring>
using namespace std;
bool vow(char ch){
return ch=='A'||ch=='E'||ch=='I'||ch=='O'||ch=='U';
}
bool d[][][];
int main(){
char str[];
int t;
scanf("%d",&t);
for(int cse=; cse<=t; ++cse){
scanf("%s",str+);
int n=strlen(str+);
memset(d,,sizeof(d));
d[][][]=d[][][]=;
bool bad=;
for(int i=; i<=n; ++i){
if(str[i]=='?' || vow(str[i])){
for(int j=; j<=; ++j){
if(d[][i-][j]){
d[][i][j+]=;
d[][i][]=;
}
}
if(d[][i-][]) bad=;
}
if(str[i]=='?' || !vow(str[i])){
for(int j=; j<=; ++j){
if(d[][i-][j]){
d[][i][j+]=;
d[][i][]=;
}
}
if(d[][i-][]) bad=;
}
}
bool good=;
for(int i=;i<;++i) good|=(d[][n][i]|d[][n][i]);
if(good && bad) printf("Case %d: MIXED\n",cse);
else if(good) printf("Case %d: GOOD\n",cse);
else printf("Case %d: BAD\n",cse);
}
return ;
}
最新文章
- AutoMapper(五)
- DBCP 配置备注
- 数据库中老师学生家长表添加自动同意好友自动(AgreeAddingFriend ),默认为True
- mysql学习(3)-linux下mysql主从复制
- 001淘淘商城项目:项目的Maven工程搭建
- TestLink学习四:TestLink1.9.13使用说明
- FileInputstream的available()方法
- SWOT分析法
- 【菜鸟入门】安装配置eclipse 并编写运行第一个Java程序
- os X下mds_stores占用大量cpu的解决办法
- 自动删除Android工程中无用的资源
- gulp的使用介绍及技巧
- linux内核中的const成员是否可以修改?
- 校园网ipv6连接问题
- LOJ#3093. 「BJOI2019」光线(递推+概率期望)
- shell wc命令 统计行数
- CSS学习摘要-盒子模型
- 20165203《Java程序设计》第七周Java学习总结
- 十几行代码带你用Python批量实现txt转xls,方便快捷
- UNDO自我理解总结