/* -*- coding: utf-8 -*- * * 437.cc: No.437 cwwゲーム - yukicoder */ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; /* constant */ const int MAX_N = 13; const int NBITS = 1 << MAX_N; /* typedef */ typedef vector vi; typedef queue qi; typedef pair pii; typedef map mii; /* global variables */ int ds[MAX_N]; int dp[NBITS]; /* subroutines */ /* main */ int main() { string s; cin >> s; int n = s.size(); for (int i = 0; i < n; i++) ds[i] = s[i] - '0'; mii cwws; for (int i = 0; i < n; i++) if (ds[i] > 0) for (int j = i + 1; j < n; j++) if (ds[i] != ds[j]) for (int k = j + 1; k < n; k++) if (ds[j] == ds[k]) { int bits = ((1 << i) | (1 << j) | (1 << k)); int d = ds[i] * 100 + ds[j] * 11; cwws[bits] = d; //printf("%d,%d,%d=%d\n", i, j, k, d); } //printf("%lu\n", cwws.size()); int nbits = 1 << n; for (int bits = 0; bits < nbits; bits++) { for (mii::iterator mit = cwws.begin(); mit != cwws.end(); mit++) if ((bits & mit->first) == mit->first) { int bits0 = bits ^ mit->first; int d0 = mit->second + dp[bits0]; if (dp[bits] < d0) dp[bits] = d0; } } printf("%d\n", dp[nbits - 1]); return 0; }