CCCPaste

Untitled

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
int films, days, passed;
ll dp[200][200];
ll rec(int days_left, int films_left) {
    if(days_left == 0 and films_left == 0) {
        return 1;
    }
    if(days_left == 0) {
        return 0;
    }
    if(dp[days_left][films_left] != -1) {
        return dp[days_left][films_left];
    }
    ll ret = 0;
    ll MOD = 1e9 + 7;
    ret += (rec(days_left - 1, films_left - 1) % MOD) * (ll) (films - films_left + 1);
    ret %= MOD;
    ret += rec(days_left - 1, films_left) * max(0LL, (ll) (films_left - passed));
    ret %= MOD;
    return dp[days_left][films_left] = ret % MOD;
}
int main(){
    ios_base::sync_with_stdio(false);
    cin >> films >> days >> passed;
    memset(dp, -1, sizeof dp);
    cout << rec(days, films) << endl;
    return 0;
}