Submission #1140807

#TimeUsernameProblemLanguageResultExecution timeMemory
114080712345678Vještica (COCI16_vjestica)C++20
160 / 160
83 ms584 KiB
#include <bits/stdc++.h>

using namespace std;

const int nx=16, kx=30;

int n, cnt[nx][kx], dp[1<<nx];
string s;

int main()
{
    cin.tie(NULL)->sync_with_stdio(false);
    cin>>n;
    for (int i=0; i<n; i++)
    {
        cin>>s;
        for (auto x:s) cnt[i][x-'a']++; 
    }
    for (int msk=1; msk<(1<<n); msk++)
    {
        int cur=0;
        for (int c=0; c<26; c++)
        {
            int mn=1e9;
            for (int i=0; i<n; i++) if (msk&(1<<i)) mn=min(mn, cnt[i][c]);
            cur+=mn;
        }
        if (__builtin_popcount(msk)==1)
        {
            dp[msk]=cur;
            continue;
        }
        dp[msk]=1e9;
        for (int sub=msk; sub>0; sub=(sub-1)&msk) dp[msk]=min(dp[msk], dp[sub]+dp[msk^sub]-cur);
    }
    //for (int msk=0; msk<(1<<n); msk++) cout<<"debug "<<msk<<' '<<dp[msk]<<'\n';
    cout<<dp[(1<<n)-1]+1;
}
#Verdict Execution timeMemoryGrader output
Fetching results...