제출 #527281

#제출 시각아이디문제언어결과실행 시간메모리
527281Hydroxic_AcidCalvinball championship (CEOI15_teams)C++17
60 / 100
1077 ms8308 KiB
#include <iostream>
#include <cstring>
using namespace std;

int N;
int arr[10005];
int memo[1005][1005][2];

int dp(int idx, int num, int marker){
    if(idx >= N) return 0;
    if(idx == N - 1) return 1;
    if(num > N) return 0;
    if(memo[idx][num][marker] != -1) return memo[idx][num][marker];
    int summ = 0;
    for(int i = 1; i <= num + 1; i++){
        if(marker){
            if(i == arr[idx + 1]) summ += dp(idx + 1, max(num, i), 1);
            else if (i < arr[idx + 1]) summ += dp(idx + 1, num, 0);
            else break;
        }
        else if(i == num + 1) summ += dp(idx + 1, num + 1, 0);
        else summ += dp(idx + 1, num, 0);
        summ %= 1000007;
    }
    memo[idx][num][marker] = summ;
    return summ;
}

int main(){
    cin >> N;
    for(int i = 0; i < N; i++) cin >> arr[i];
    memset(memo, -1, sizeof(memo));
    cout << dp(0, 1, 1);
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...