結果

問題 No.273 回文分解
ユーザー alpha_virginis
提出日時 2015-08-28 22:40:16
言語 C++11
(gcc 4.8.5)
結果
AC  
実行時間 4 ms
コード長 1,128 Byte
コンパイル時間 1,016 ms
使用メモリ 3,472 KB
最終ジャッジ日時 2020-01-17 08:45:02

テストケース

テストケース表示
入力 結果 実行時間
使用メモリ
99_system_test1.txt AC 4 ms
3,280 KB
99_system_test2.txt AC 0 ms
3,260 KB
99_system_test3.txt AC 4 ms
3,336 KB
sample1.txt AC 4 ms
3,340 KB
sample2.txt AC 0 ms
3,184 KB
sample3.txt AC 0 ms
3,288 KB
system_test1.txt AC 4 ms
3,264 KB
system_test2.txt AC 0 ms
3,336 KB
system_test3.txt AC 0 ms
3,336 KB
system_test4.txt AC 4 ms
3,468 KB
system_test5.txt AC 0 ms
3,328 KB
system_test6.txt AC 4 ms
3,272 KB
system_test7.txt AC 0 ms
3,344 KB
system_test8.txt AC 0 ms
3,284 KB
system_test9.txt AC 4 ms
3,248 KB
test1.txt AC 0 ms
3,468 KB
test2.txt AC 4 ms
3,316 KB
test3.txt AC 0 ms
3,316 KB
test4.txt AC 4 ms
3,340 KB
test5.txt AC 0 ms
3,264 KB
test6.txt AC 0 ms
3,320 KB
test7.txt AC 4 ms
3,332 KB
test8.txt AC 0 ms
3,256 KB
test9.txt AC 4 ms
3,340 KB
test10.txt AC 4 ms
3,276 KB
test11.txt AC 0 ms
3,452 KB
test12.txt AC 4 ms
3,452 KB
test13.txt AC 4 ms
3,472 KB
test14.txt AC 0 ms
3,272 KB
test15.txt AC 4 ms
3,344 KB
test16.txt AC 0 ms
3,316 KB
test17.txt AC 4 ms
3,320 KB
test18.txt AC 0 ms
3,452 KB
test19.txt AC 0 ms
3,388 KB
test20.txt AC 4 ms
3,284 KB
テストケース一括ダウンロード

ソースコード

diff #
#include <bits/stdc++.h>
#include <cstdint>
#include <sys/time.h>

typedef std::int_fast32_t  s32;
typedef std::uint_fast32_t u32;
typedef std::int_fast64_t  s64;
typedef std::uint_fast64_t u64;

const unsigned long mod = 1000000007;

std::string str;

bool check(int begin, int end2) {
  for(int i = begin; i <= end2; ++i) {
    if( str[i] != str[begin + end2 - i] ) return false;
  }
  return true;
}

bool ispa[64][64];
int N;

int memo[64];

int dfs(int begin, int max) {
  if( ispa[begin][N-1] ) return std::max(max, N-1-begin+1);
  if( memo[begin] >= max ) return memo[begin];
  for(int next = N-2; next >= begin; --next) {
    if( ispa[begin][next] ) {
      max = std::max(max, next - begin + 1);
      max = std::max(max, dfs(next+1, max));
    }
  }
  memo[begin] = max;
  return max;
}

int main() {

  std::cin >> str;
  std::vector<std::string> vstr;
  N = str.size();

  for(int i = 0; i < 64; ++i) {
    memo[i] = -1;
  }

  for(int i = 0; i < N; ++i) {
    for(int j = i; j < N; ++j) {
      ispa[i][j] = check(i, j);
    }
  }
  ispa[0][N-1] = false;

  std::cout << dfs(0, 0) << std::endl;
    
  return 0;
}

0