# | Time | Username | Problem | Language | Result | Execution time | Memory |
---|---|---|---|---|---|---|---|
1263040 | SmuggingSpun | Vještica (COCI16_vjestica) | C++20 | 80 ms | 584 KiB |
#include<bits/stdc++.h>
#define taskname "F"
using namespace std;
const int INF = 1e9;
template<class T>void minimize(T& a, T b){
if(a > b){
a = b;
}
}
int dp[1 << 16];
int main(){
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
if(fopen(taskname".inp", "r")){
freopen(taskname".inp", "r", stdin);
}
int n;
cin >> n;
vector<vector<int>>cnt(26, vector<int>(n, 0));
for(int i = 0; i < n; i++){
string s;
cin >> s;
for(char& c : s){
cnt[c - 97][i]++;
}
}
memset(dp, 0x0f, sizeof(dp));
for(int mask = 1; mask < (1 << n); mask++){
int sum = 0;
for(int i = 0; i < 26; i++){
int d = INF;
for(int j = 0; j < n; j++){
if(1 << j & mask){
minimize(d, cnt[i][j]);
}
}
sum += d;
}
if(__builtin_popcount(mask) == 1){
dp[mask] = sum;
continue;
}
for(int sub = (mask - 1) & mask; sub > 0; sub = (sub - 1) & mask){
minimize(dp[mask], dp[sub] + dp[mask ^ sub] - sum);
}
}
cout << dp[(1 << n) - 1] + 1;
}
Compilation message (stderr)
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |