Advertisement
Vince14

14165

Mar 19th, 2023
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.84 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <cmath>
  6. #include <vector>
  7. #include <set>
  8. #include <map>
  9. #include <stack>
  10. #include <queue>
  11. #include <deque>
  12. #include <unordered_map>
  13. #include <iomanip>
  14. #include <regex>
  15. #include <numeric>
  16. using namespace std;
  17. #define pii pair<long long , long long>
  18. #define FAST ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL)
  19. const long long dx[4] = {0, 1, 0, -1}, dy[4] = {1, 0, -1, 0};
  20. const long long MAX = 100005;
  21. const long long MOD = 1000000009;
  22.  
  23. int n, m, k;
  24.  
  25. long long arr1[1005], arr2[1005];
  26. long long dp[1005][1005];
  27. long long dp2[1005][1005];
  28.  
  29. void do_dp(){
  30.     memset(dp2, 0, sizeof dp2);
  31.     for(int i = 1; i <= n; i++){
  32.         for(int j = 1; j <= m; j++){
  33.             if(arr1[i] > arr2[j]){
  34.                 dp2[i][j] = dp[i - 1][j - 1];
  35.             }
  36.         }
  37.     }
  38. }
  39.  
  40. void update_dp(){
  41.     for(int i = 0; i < 1005; i++){
  42.         for(int j = 0; j < 1005; j++){
  43.             dp[i][j] = dp2[i][j];
  44.         }
  45.     }
  46.     for(int i = 0; i < n; i++){
  47.         for(int j = 0; j < m; j++){
  48.             dp[i + 1][j + 1] += dp[i][j + 1];
  49.             dp[i + 1][j + 1] += dp[i + 1][j];
  50.             dp[i + 1][j + 1] -= dp[i][j];
  51.             dp[i + 1][j + 1] %= MOD;
  52.         }
  53.     }
  54. }
  55.  
  56. int main() {
  57.     //freopen("talent.in", "r", stdin);
  58.     //freopen("talent.out", "w", stdout);
  59.     FAST;
  60.     cin >> n >> m >> k;
  61.     for(int i = 1; i <= n; i++){
  62.         cin >> arr1[i];
  63.     }
  64.     sort(arr1 + 1, arr1 + n + 1);
  65.     for(int i = 1; i <= m; i++){
  66.         cin >> arr2[i];
  67.     }
  68.     sort(arr2 + 1, arr2 + m + 1);
  69.     fill(&dp[0][0], &dp[0][0] + 1005 * 1005, 1);
  70.  
  71.     for (int i = 0; i < k; i++)
  72.     {
  73.         do_dp();
  74.         update_dp();
  75.     }
  76.     while(dp[n][m] < 0){
  77.         dp[n][m] += MOD;
  78.     }
  79.     cout << dp[n][m];
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement