Advertisement
Guest User

479E

a guest
Feb 17th, 2019
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.89 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 5007
  3. #define INF 1000000007
  4.  
  5. using namespace std;
  6. typedef long long ll;
  7. typedef pair<int, int> pii;
  8.  
  9. ll dp[MAX][MAX], sum[MAX];
  10. int limite, n, k;
  11. int main(){
  12.     memset(dp, -1, sizeof dp);
  13.     int a;cin >> n >> a >> limite >> k;
  14.    
  15.     for(int i = 1; i <= n; i++) dp[0][i] = 1;
  16.     dp[0][limite] = 0;
  17.     for(int i = 1; i <= k; i++){
  18.         for(int j = 1; j <= n; j++) sum[j] = (sum[j-1] + dp[i-1][j])%INF;
  19.        
  20.         for(int j = 1; j <= n; j++){
  21.            
  22.             if(j == limite) continue;
  23.             int dif = abs(j-limite);
  24.             if(j > limite) dp[i][j] = (sum[min(j+dif-1, n)]-sum[limite] + INF)%INF;
  25.             else if(j < limite) dp[i][j] = (sum[limite-1]-sum[max(j-dif, 0)] + INF)%INF;
  26.             dp[i][j] = (dp[i][j]-dp[i-1][j]+INF)%INF;
  27.         }
  28.     }
  29.    
  30.     //for(int i = 0; i <= k; i++){
  31.     //  for(int j = 1; j <= n; j++) cout << dp[i][k] << " ";
  32.     //  cout << endl;
  33.     //}
  34.     cout << dp[k][a]<< endl;
  35.     return 0;
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement