UVA 4564 - Clickomania
来源:互联网 发布:宝马x5和奔驰gle 知乎 编辑:程序博客网 时间:2024/05/29 08:53
题目链接:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2565
题 意:给你一串字符,可以将相连的三个以及以上的消去(空字符可以消去),问这个字符串能否完全消去?
思 路: 1,如果是空的,显然可以;
2,如果x,y是可以消除的(solvable) ,那么XY, AXA, AXAYA(由于空的也是可以,所以可以看成AAXA, AXAA) 都是可以的;其他就是不行的;
代码如下:
#include<stdio.h>#include<string.h>#include<algorithm>#include<stack>using namespace std;const int maxn = 200;typedef long long LL;int dp[maxn][maxn];char v[maxn];int ans;int dfs( int i, int j ){ if( i == j ) return 0;//还剩一个,无法消去 if( i > j ) return 1;//到达边界,已完全消去 if( dp[i][j] != -1 ) return dp[i][j];//若已经判断过是否可以消去,则直接返回 for( int k = i+1; k < j; k ++ ) { dp[i][j] = dfs( i, k ) && dfs( k+1, j ); if( dp[i][j] == 1 ) return 1; } if( v[i] == v[j] ) { dp[i][j] = dfs( i+1, j-1 ); if( dp[i][j] == 1 ) return 1; for( int k = i+1; k < j; k ++ ) { if( v[i] == v[k] ) { dp[i][j] = dfs( i+1, k-1 ) && dfs( k+1, j-1 ); if( dp[i][j] == 1 ) return 1; } } } return dp[i][j] = 0;}int main(){ while( scanf ( "%s", v ) != EOF ) { int len = strlen( v ); memset( dp, -1, sizeof( dp ) ); ans = 0; if( dfs( 0, len-1 ) ) printf("solvable\n"); else printf("unsolvable\n"); } return 0;}
0 0
- UVA 4564 - Clickomania
- HDU3427-Clickomania
- POJ 3821 Clickomania
- HDU3427 Clickomania 【DP】
- HDU 3427Clickomania
- HDU3427 Clickomania【记忆化搜索】【区间DP】
- uva
- UVA
- UVA
- UVA
- uva
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- UVA
- 每天学点Python之dict
- 整合阿里云OSS文件上传1
- 编写自己的Exception
- DOM操作
- c++学习日记2015.12.22
- UVA 4564 - Clickomania
- Nmon命令行:Linux系统性能的监测利器
- sqlite3使用事务处理
- 15级竞赛组周赛(3)题解(12.22.15)
- 前端性能优化(三)——传统 JavaScript 优化的误区
- struts2学习
- 一种巧妙的反转字符串的方法及思考过程
- 在Tomcat部署Solr
- 每天学点Python之Iterator