제출 #804799

#제출 시각아이디문제언어결과실행 시간메모리
804799mousebeaverChorus (JOI23_chorus)C++14
40 / 100
7007 ms79488 KiB
#define ll long long #define INF numeric_limits<ll>::max()/2 #include <bits/stdc++.h> using namespace std; ll sum(ll l, ll r, vector<ll>& pref) { return pref[r] - (l == 0 ? 0 : pref[l-1]); } int main() { ios::sync_with_stdio(false); cin.tie(0); ll n, k; cin>>n>>k; string s; cin>>s; vector<ll> a(0); for(ll i = 0; i < 2*n; i++) { if(s[i] == 'A') { a.push_back(i+1); } } ll output = 0; for(ll i = 0; i < n; i++) { if(a[i] > 2*i+1) { output += a[i] - (2*i+1); a[i] = 2*i+1; } } vector<ll> pref(n); pref[0] = a[0]; for(ll i = 1; i < n; i++) { pref[i] = a[i]; } vector<vector<ll>> dp(n+1, vector<ll> (k+1, INF)); //n x 'A', k songs => Min operations dp[0][0] = 0; for(ll i = 0; i < n; i++) { for(ll j = 0; j < k; j++) { ll goal = 2*i+1; ll cost = 0; for(ll c = i+1; c <= n; c++) { if(a[c-1] > goal) { cost += a[c-1]-goal; } goal++; dp[c][j+1] = min(dp[c][j+1], dp[i][j]+cost); } } } /*vector<vector<ll>> dp(n+1, vector<ll> (k+1, INF)); //n x 'A', k songs => Min operations dp[0][0] = 0; for(ll i = 1; i <= n; i++) { for(ll j = 1; j <= k; j++) { for(ll c = 0; c < i; c++) { ll cost = 0; ll goal = 2*c+1; for(ll d = c; d < i; d++) { if(a[d] > goal) { cost += a[d]-goal; } goal++; } dp[i][j] = min(dp[i][j], dp[c][j-1]+cost); } } }*/ ll res = *min_element(dp[n].begin(), dp[n].end()); cout<<res+output<<"\n"; 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...