// 2021-1-odd-od-deski-do-deski.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> constexpr int MAXN = 3e3 + 7; constexpr long long MD = 1e9 + 7; // length, how many possible ends // how many bad long long dp[MAXN][MAXN]; // how many good long long dp2[MAXN][MAXN]; int main() { int n; long long m; std::cin >> n >> m; dp2[0][0] = 1; for (size_t l = 1; l <= n; l++) { for (long long i = 0; i <= l; i++) { dp[l][i] += dp[l - 1][i] * (m - i); dp[l][i] %= MD; dp2[l][i] += dp[l - 1][i] * i; dp2[l][i] %= MD; dp[l][i + 1] += dp2[l - 1][i] * (m - i); dp[l][i + 1] %= MD; dp2[l][i] += dp2[l - 1][i] * i; dp2[l][i] %= MD; } /* std::cout << l << ": \n"; std::cout << "dp: "; for (size_t i = 0; i <= n; i++) { std::cout << dp[l][i] << ' '; } std::cout << "\ndp2: "; for (size_t i = 0; i <= n && i <= m; i++) { std::cout << dp2[l][i] << ' '; } std::cout << '\n';*/ } long long answ = 0; for (size_t i = 0; i <= n; i++) { answ += dp2[n][i]; answ %= MD; } std::cout << answ << '\n'; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file
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 | // 2021-1-odd-od-deski-do-deski.cpp : This file contains the 'main' function. Program execution begins and ends there. // #include <iostream> constexpr int MAXN = 3e3 + 7; constexpr long long MD = 1e9 + 7; // length, how many possible ends // how many bad long long dp[MAXN][MAXN]; // how many good long long dp2[MAXN][MAXN]; int main() { int n; long long m; std::cin >> n >> m; dp2[0][0] = 1; for (size_t l = 1; l <= n; l++) { for (long long i = 0; i <= l; i++) { dp[l][i] += dp[l - 1][i] * (m - i); dp[l][i] %= MD; dp2[l][i] += dp[l - 1][i] * i; dp2[l][i] %= MD; dp[l][i + 1] += dp2[l - 1][i] * (m - i); dp[l][i + 1] %= MD; dp2[l][i] += dp2[l - 1][i] * i; dp2[l][i] %= MD; } /* std::cout << l << ": \n"; std::cout << "dp: "; for (size_t i = 0; i <= n; i++) { std::cout << dp[l][i] << ' '; } std::cout << "\ndp2: "; for (size_t i = 0; i <= n && i <= m; i++) { std::cout << dp2[l][i] << ' '; } std::cout << '\n';*/ } long long answ = 0; for (size_t i = 0; i <= n; i++) { answ += dp2[n][i]; answ %= MD; } std::cout << answ << '\n'; } // Run program: Ctrl + F5 or Debug > Start Without Debugging menu // Debug program: F5 or Debug > Start Debugging menu // Tips for Getting Started: // 1. Use the Solution Explorer window to add/manage files // 2. Use the Team Explorer window to connect to source control // 3. Use the Output window to see build output and other messages // 4. Use the Error List window to view errors // 5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project // 6. In the future, to open this project again, go to File > Open > Project and select the .sln file |