Submission #637631

#TimeUsernameProblemLanguageResultExecution timeMemory
637631danikoynovGroup Photo (JOI21_ho_t3)C++14
64 / 100
5047 ms98400 KiB
/** ____ ____ ____ ____ ____ ____ ||l |||e |||i |||n |||a |||d || ||__|||__|||__|||__|||__|||__|| |/__\|/__\|/__\|/__\|/__\|/__\| **/ #include<bits/stdc++.h> #define endl '\n' using namespace std; typedef long long ll; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } const int maxn = 5010; int n, a[maxn], dp[maxn], pos[maxn], cnt[maxn][maxn]; void solve() { cin >> n; for (int i = 1; i <= n; i ++) { cin >> a[i]; pos[a[i]] = i; } for (int i = 1; i <= n; i ++) for (int j = 1; j <= n; j ++) { cnt[i][j] = cnt[i - 1][j] + cnt[i][j - 1] - cnt[i - 1][j - 1]; if (pos[i] == j) cnt[i][j] ++; } /**for (int i = 1; i <= n; i ++, cout << endl) for (int j = 1; j <= n; j ++) cout << cnt[i][j] << " ";*/ for (int i = 1; i <= n; i ++) { dp[i] = n * n; int all = 0; for (int k = i; k > 0; k --) all += (cnt[n][pos[k]] - cnt[i][pos[k]]); for (int j = 0; j < i; j ++) { if (j > 0) all -= (cnt[n][pos[j]] - cnt[i][pos[j]]); int sum = 0; for (int k = i; k > j; k --) { ///ll cur = pos[k] + (j + (i - k) - query(pos[k] - 1)); ll cur = + (cnt[k - 1][pos[k]] - cnt[j][pos[k]]); ///cout << i << " : " << j << " : " << k << " " << cnt[n][pos[k]] << " " << cnt[k][pos[k]] << endl; //cur -= st; //st ++; sum = sum + cur; } ///cout << i << " " << j << " " << sum << endl; dp[i] = min(dp[i], dp[j] + sum + all); } ///cout << i << " -- " << dp[i] << endl; } cout << dp[n] << endl; } int main() { solve(); return 0; }
#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...