Submission #948149

#TimeUsernameProblemLanguageResultExecution timeMemory
948149BlagojVještica (COCI16_vjestica)C++17
160 / 160
86 ms1520 KiB
#include <bits/stdc++.h> using namespace std; #define endl '\n' #define ll long long #define all(x) (x).begin(), (x).end() int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n; cin >> n; int len[n], cnt[n][26]; memset(cnt, 0, sizeof(cnt)); for (int i = 0; i < n; i++) { string s; cin >> s; len[i] = s.size(); for (auto x : s) cnt[i][x - 'a']++; } ll dp[1 << n]; for (int mask = 1; mask < (1 << n); mask++) { if (__builtin_popcount(mask) == 1) { for (int j = 0; j < n; j++) { if (mask & (1 << j)) dp[mask] = len[j]; } continue; } int sum = 0; int mn[26]; for (int j = 0; j < 26; j++) mn[j] = 1e9; for (int j = 0; j < n; j++) { if (mask & (1 << j)) { for (int k = 0; k < 26; k++) mn[k] = min(mn[k], cnt[j][k]); } } for (int j = 0; j < 26; j++) sum += mn[j]; dp[mask] = 1e9; for (int sub = mask & (mask - 1); sub; sub = mask & (sub - 1)) { dp[mask] = min(dp[mask], dp[sub] + dp[mask ^ sub] - sum); } } cout << dp[(1 << n) - 1] + 1; }
#Verdict Execution timeMemoryGrader output
Fetching results...