제출 #1319418

#제출 시각아이디문제언어결과실행 시간메모리
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...