제출 #942191

#제출 시각아이디문제언어결과실행 시간메모리
942191dsyzGroup Photo (JOI21_ho_t3)C++17
0 / 100
0 ms348 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; #define MAXN (1000005) int main() { ios_base::sync_with_stdio(false);cin.tie(0); ll N; cin>>N; ll H[N]; for(ll i = 0;i < N;i++){ cin>>H[i]; } ll dp[N][1ll<<N]; for(ll i = 0;i < N;i++){ for(ll j = 0;j < (1ll<<N);j++){ dp[i][j] = 1e18; } } for(ll i = 0;i < N;i++){ for(ll j = 0;j < (1ll<<N);j++){ ll on = 0; for(ll bit = 0;bit < N;bit++){ if(j & (1ll<<bit)){ on++; } } if(on != i + 1) continue; if(i == 0){ ll first = 0; for(ll bit = 0;bit < N;bit++){ if(j & (1ll<<bit)){ first = bit; } } dp[i][j] = first; continue; } for(ll bit = 0;bit < N;bit++){ if(j & (1ll<<bit)){ ll minus = 0; for(ll b = 0;b < bit;b++){ if(j & (1ll<<b)){ minus++; } } ll right = 0; for(ll b = bit + 1;b < N;b++){ if(j & (1ll<<b)){ right++; } } if(bit + right <= i) dp[i][j] = min(dp[i][j],dp[i - 1][j ^ (1ll<<bit)]); else dp[i][j] = min(dp[i][j],dp[i - 1][j ^ (1ll<<bit)] + (bit + right - i) - minus); } } } } cout<<dp[N - 1][(1ll<<N) - 1]<<'\n'; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...