#include <bits/stdc++.h>
using namespace std;
#define pb push_back
int main() {
ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int n, k, t;
cin>>n>>k>>t;
string a;
cin>>a;
vector <vector <int>> dp(3, vector <int> (n+7, -1));
dp[0][0]=0;
dp[1][0]=1;
dp[2][0]=k;
for (int i=0; i<n; i++)
{
if (dp[1][i]==1) {
if (a[i]=='3') {
dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1);
dp[1][i+1]=dp[1][i];
dp[2][i+1]=dp[2][i];
}
else if (a[i]=='2') {
if (dp[2][i]>0) {
dp[2][i+1]=dp[2][i]-1;
dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1);
dp[1][i+1]=dp[1][i];
}
else {
dp[0][i+1]=dp[0][i];
dp[1][i+1]=dp[1][i];
dp[2][i+1]=dp[2][i];
}
}
else {
if (dp[2][i]>0) {
dp[2][i+1]=dp[2][i]-1;
dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1);
dp[1][i+1]=dp[1][i];
}
else {
if (i<t || i>=n-t) {
dp[0][i+1]=-1;
}
else {
dp[0][i+1]=dp[0][i-t];
dp[1][i+1]=2;
dp[2][i+1]=dp[2][i-t];
}
}
}
}
else
{
if (a[i]=='3') {
dp[0][i+1]=dp[0][i];
dp[2][i+1]=dp[2][i];
dp[1][i+1]=dp[1][i];
}
else if (a[i]=='2') {
if (dp[2][i]>0) {
dp[2][i+1]=dp[2][i]-1;
dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1);
dp[1][i+1]=dp[1][i];
}
else {
dp[0][i+1]=dp[0][i];
dp[1][i+1]=dp[1][i];
dp[2][i+1]=dp[2][i];
}
}
else {
if (dp[2][i]>0) {
dp[2][i+1]=dp[2][i]-1;
dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1);
dp[1][i+1]=dp[1][i];
}
else {
dp[0][i+1]=dp[0][i];
dp[1][i+1]=dp[1][i];
dp[2][i+1]=dp[2][i];
}
}
if (i>=t && dp[i+1]==dp[i-t]) {
dp[1][i+1]=1;
}
}
}
cout<<dp[0][n];
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | #include <bits/stdc++.h> using namespace std; #define pb push_back int main() { ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n, k, t; cin>>n>>k>>t; string a; cin>>a; vector <vector <int>> dp(3, vector <int> (n+7, -1)); dp[0][0]=0; dp[1][0]=1; dp[2][0]=k; for (int i=0; i<n; i++) { if (dp[1][i]==1) { if (a[i]=='3') { dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1); dp[1][i+1]=dp[1][i]; dp[2][i+1]=dp[2][i]; } else if (a[i]=='2') { if (dp[2][i]>0) { dp[2][i+1]=dp[2][i]-1; dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1); dp[1][i+1]=dp[1][i]; } else { dp[0][i+1]=dp[0][i]; dp[1][i+1]=dp[1][i]; dp[2][i+1]=dp[2][i]; } } else { if (dp[2][i]>0) { dp[2][i+1]=dp[2][i]-1; dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1); dp[1][i+1]=dp[1][i]; } else { if (i<t || i>=n-t) { dp[0][i+1]=-1; } else { dp[0][i+1]=dp[0][i-t]; dp[1][i+1]=2; dp[2][i+1]=dp[2][i-t]; } } } } else { if (a[i]=='3') { dp[0][i+1]=dp[0][i]; dp[2][i+1]=dp[2][i]; dp[1][i+1]=dp[1][i]; } else if (a[i]=='2') { if (dp[2][i]>0) { dp[2][i+1]=dp[2][i]-1; dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1); dp[1][i+1]=dp[1][i]; } else { dp[0][i+1]=dp[0][i]; dp[1][i+1]=dp[1][i]; dp[2][i+1]=dp[2][i]; } } else { if (dp[2][i]>0) { dp[2][i+1]=dp[2][i]-1; dp[0][i+1]=max(dp[0][i+1], dp[0][i]+1); dp[1][i+1]=dp[1][i]; } else { dp[0][i+1]=dp[0][i]; dp[1][i+1]=dp[1][i]; dp[2][i+1]=dp[2][i]; } } if (i>=t && dp[i+1]==dp[i-t]) { dp[1][i+1]=1; } } } cout<<dp[0][n]; } |
English