Submission #1319418

#TimeUsernameProblemLanguageResultExecution timeMemory
1319418vicvicVještica (COCI16_vjestica)C++20
160 / 160
60 ms1056 KiB
#include <bits/stdc++.h>

using namespace std;
const int NMAX=16;
int n;
string input[NMAX+5];
int dp[(1 << NMAX)+5], cnt[NMAX+5][50], mn[50];
int main ()
{
    ios_base :: sync_with_stdio (0);
    cin.tie (nullptr);
    cin >> n;
    for (int i=0;i<n;i++)
    {
        cin >> input[i];
        input[i]='#'+input[i];
        for (int j=1;j<input[i].size();j++)
            cnt[i][input[i][j]-'a']++;
        dp[1 << i]=(int)input[i].size()-1;
    }
    for (int i=0;i<1 << n;i++)
    {
        if (__builtin_popcount (i)<=1)
            continue;
        dp[i]=1e9;
        for (int j=i;;)
        {
            j=(j-1)&i;
            if (j==0)
                break;
            dp[i]=min (dp[i], dp[j]+dp[i^j]);
        }
        for (int j=0;j<26;j++)
            mn[j]=1e9;
        for (int j=0;j<n;j++)
        {
            if (i & (1 << j))
            {
                for (int z=0;z<26;z++)
                    mn[z]=min (mn[z], cnt[j][z]);
            }
        }
        for (int j=0;j<26;j++)
            dp[i]-=mn[j];
    }
    cout << dp[(1 << n)-1]+1;
    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...