Exploring Pyramids poj2795

来源:互联网 发布:廖嘉晨外推软件 编辑:程序博客网 时间:2024/04/29 12:19

训练指南上给图后三幅有错误


#include <iostream>#include <cstdio>#include <cstdlib>#include <cmath>#include <queue>#include <algorithm>#include <vector>#include <cstring>#include <stack>#include <cctype>#include <utility>   #include <map>#include <string>  #include <climits> #include <set>#include <string> #include <sstream>#include <utility>   #include <ctime> using std::priority_queue;using std::vector;using std::swap;using std::stack;using std::sort;using std::max;using std::min;using std::pair;using std::map;using std::string;using std::cin;using std::cout;using std::set;using std::queue;using std::string;using std::istringstream;using std::make_pair;using std::greater;using std::endl;typedef long long LL;const int MAXN(310);const LL MOD(1000000000);char str[MAXN];LL table[MAXN][MAXN];int main(){while(~scanf("%s", str+1)){int len = strlen(str+1);memset(table, 0, sizeof(table));for(int i = 1; i <= len; ++i)table[i][i] = 1LL;for(int l = 2; l <= len; ++l){int lim = len-l+1;for(int i = 1; i <= lim; ++i){int j = i+l-1;if(str[i] != str[j]){table[i][j] = 0LL;continue;}for(int k = i+1; k <= j; ++k)if(str[i] == str[k])table[i][j] = (table[i][j]+table[i+1][k-1]*table[k][j])%MOD;}}printf("%I64d\n", table[1][len]);}return 0;}


原创粉丝点击