結果

問題 No.437 cwwゲーム
ユーザー ukuku09ukuku09
提出日時 2016-10-28 23:52:48
言語 C++11
(gcc 13.3.0)
結果
AC  
実行時間 2 ms / 2,000 ms
コード長 1,143 bytes
コンパイル時間 1,339 ms
コンパイル使用メモリ 162,004 KB
実行使用メモリ 6,824 KB
最終ジャッジ日時 2024-10-12 08:26:34
合計ジャッジ時間 2,520 ms
ジャッジサーバーID
(参考情報)
judge1 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 41
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>

using namespace std;

using ll = long long;
using Pi = pair<int, int>;
using Pl = pair<ll, ll>;
using Ti = tuple<int, int, int>;
using Tl = tuple<ll, ll, ll>;

#define pb push_back
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define F first
#define S second
#define Get(t, i) get<(i)>((t))
#define all(v) (v).begin(), (v).end()
#define rep(i, n) for(int i = 0; i < (int)(n); i++)
#define reps(i, f, n) for(int i = (int)(f); i < (int)(n); i++)
#define each(a, b) for(auto& a : b)

const int inf = 1 << 25;
const ll INF = 1LL << 55;

int solve(int i, int bit, string N)
{
  if(i == N.size()) return 0;
  int ret = solve(i+1, bit, N);
  reps(j, i+1, N.size()) reps(k, j+1, N.size()) {
    if(N[i] != '0' && N[i] != N[j] && N[j] == N[k]) {
      if((bit >> i)&1 || (bit >> j)&1 || (bit >> k)&1) continue;
      string s = ""; s += N[i]; s += N[j]; s += N[k];      
      int next = bit | (1<<i) | (1<<j) | (1<<k);
      int tmp = solve(i+1, next, N);
      ret = max(ret, tmp + stoi(s));
    }
  }
  return ret;
}

int main()
{
  string N; cin >> N;
  cout << solve(0, 0, N) << endl;
  return 0;
}
0