Submission #1221851

#TimeUsernameProblemLanguageResultExecution timeMemory
1221851svtkFinancial Report (JOI21_financial)C++20
28 / 100
4098 ms192384 KiB
#include <iostream> #include <vector> using namespace std; const int N = 7005; const int S = N; const int INF = 1'000'000'005; int n, d; int a[N]; int f[S+1][N]; //minimalni mozna hodnota "maximalni a_x v rade se skorem s koncici i" int check(int l, int r, int s){ l = max(l, 0); r = min(r, n-1); int ans = INF; for(int i=l; i<=r; i++){ ans = min(ans, f[s][i]); } return ans; } int main(){ cin >> n >> d; for(int i=0; i<n; i++){ cin >> a[i]; } for(int i=0; i<n+1; i++){ for(int j=0; j<n+1; j++){ f[i][j] = INF; } } for(int i=0; i<n; i++){ f[1][i] = a[i]; for(int s=2; s<=i+1; s++){ if(check(i-d, i-1, s-1) < a[i]){ f[s][i] = a[i]; } else { f[s][i] = check(i-d, i-1, s); } } } for(int s=n; s>=0; s--){ if(f[s][n-1] != INF){ cout << s << endl; break; } } /* for(int i=0; i<n+1; i++){ for(int j=0; j<n; j++){ if(f[i][j]!=INF) cout << f[i][j] << " "; else cout << 'X' << " "; } cout << endl; } */ 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...
#Verdict Execution timeMemoryGrader output
Fetching results...