제출 #167580

#제출 시각아이디문제언어결과실행 시간메모리
167580manh9203Vještica (COCI16_vjestica)C++17
160 / 160
134 ms1952 KiB
#include<bits/stdc++.h>
using namespace std;
const int N = 20;
const int M = 1e5 + 5;
int n,cnt[N][30],dem[M],dp[M];
string s[N];
int main(){
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
	cin >> n;
	for(int i=1;i<=n;i++){
		cin >> s[i];
		for(int j=0;j<s[i].length();j++){
			cnt[i][s[i][j] - 96]++;
		}
	}
	for(int mask = 1; mask < (1 << n); mask++){
		for(int i=1;i<=26;i++){
			int mn = 1e9;
			for(int j=0;j<n;j++){
				if((mask >> j) & 1){
					mn = min(mn, cnt[j+1][i]);
				}
			}
			dem[mask] += mn;
		}
	}
	dp[0] = 1e9;
	for(int mask = 1; mask < (1 << n); mask++){
		if(__builtin_popcount(mask) == 1){
			for(int i=0;i<n;i++){
				if((mask >> i) & 1){
					dp[mask] = s[i+1].length();
				}
			}
		}else{
			dp[mask] = 1e9;
			for(int sub = mask; sub > 0; sub = (sub-1) & mask){
				dp[mask] = min(dp[mask], dp[sub] + dp[sub ^ mask] - dem[mask]);
			}
		}
	}
	cout << dp[(1<<n)-1] + 1;
}

컴파일 시 표준 에러 (stderr) 메시지

vjestica.cpp: In function 'int main()':
vjestica.cpp:12:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(int j=0;j<s[i].length();j++){
               ~^~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...