卬高杯
提出id | 提出時刻 | ユーザー名 | 問題 | 言語 | 判定状況 | 判定 | 実行時間 |
---|---|---|---|---|---|---|---|
114774 | 2023-10-24 08:01:59 | Eug1ena | H | cpp | 19/19 | TLE | 157 |
//#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using lint = long long;
constexpr lint mod = 1e9 + 7;
#define all(x) begin(x), end(x)
#define bitcount(n) __builtin_popcountll((lint)(n))
#define fcout cout << fixed << setprecision(15)
#define highest(x) (63 - __builtin_clzll(x))
#define rep(i, n) for(int i = 0; i < int(n); i++)
#define rep2(i, l, r) for(int i = int(l); i < int(r); i++)
#define repr(i, n) for(int i = int(n) - 1; i >= 0; i--)
#define repr2(i, l, r) for(int i = int(r) - 1; i >= int(l); i--)
#define accumulate you cannot use this word!
constexpr int inf9 = 1e9; constexpr lint inf18 = 1e18;
inline void Yes(bool condition){ if(condition) cout << "Yes" << endl; else cout << "No" << endl; }
template<class itr> void array_output(itr start, itr goal){ for(auto i = start; i != goal; i++) cout << (i == start ? "" : " ") << (*i); cout << endl; }
template<class itr> void cins(itr first, itr last){ for(auto i = first; i != last; i++){ cin >> (*i); } }
template<class T> T gcd(T a, T b){ if(b) return gcd(b, a % b); else return a; }
template<class T> T lcm(T a, T b){ return a / gcd(a, b) * b; }
template<class T> bool chmax(T &a, const T &b){ if(a < b){ a = b; return 1; } return 0; }
template<class T> bool chmin(T &a, const T &b){ if(b < a){ a = b; return 1; } return 0; }
inline int has(lint i, int j){ return (i >> j) & 1; }
int dy[4] = {1, 0, -1, 0}; int dx[4] = {0, 1, 0, -1};
bool is_inside(lint y, lint x, lint H, lint W){ return (0 <= y && y < H && 0 <= x && x < W); }
struct io_init {
io_init() {
cin.tie(nullptr); cout.tie(nullptr);
std::ios::sync_with_stdio(false);
}
} io_init;
int n;
string s[20];
int len[20];
int dp[26][1 << 16];
int make_str(char at, int bit_used){
if(dp[at - 'a'][bit_used] != -1){
return dp[at - 'a'][bit_used];
}
int ans = 0;
rep(i, n){
if(!has(bit_used, i) && s[i][0] == at){
char to = s[i].back();
chmax(ans, len[i] + make_str(to, bit_used | (1 << i)));
}
}
return dp[at - 'a'][bit_used] = ans;
}
int main(){
cin >> n;
rep(i, n){
cin >> s[i];
len[i] = int(s[i].size());
}
rep(i, 26) rep(j, 1 << 16){
dp[i][j] = -1;
}
int ans = 0;
rep(i, 26){
chmax(ans, make_str('a' + i, 0));
}
cout << ans << endl;
}
sample1.txt AC 8 sample2.txt AC 9 sample3.txt AC 13 case1.txt WA 25 case2.txt WA 24 case3.txt WA 25 case4.txt WA 13 case5.txt WA 11 case6.txt AC 52 case7.txt WA 8 case8.txt TLE 157 case9.txt TLE 91 case10.txt TLE 91 case11.txt WA 8 case12.txt TLE 104 case13.txt TLE 92 case14.txt TLE 94 case15.txt TLE 94 case16.txt WA 8 157 RE157 TLE