Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define MAX 5007
- #define INF 1000000007
- using namespace std;
- typedef long long ll;
- typedef pair<int, int> pii;
- ll dp[MAX][MAX], sum[MAX];
- int limite, n, k;
- int main(){
- memset(dp, -1, sizeof dp);
- int a;cin >> n >> a >> limite >> k;
- for(int i = 1; i <= n; i++) dp[0][i] = 1;
- dp[0][limite] = 0;
- for(int i = 1; i <= k; i++){
- for(int j = 1; j <= n; j++) sum[j] = (sum[j-1] + dp[i-1][j])%INF;
- for(int j = 1; j <= n; j++){
- if(j == limite) continue;
- int dif = abs(j-limite);
- if(j > limite) dp[i][j] = (sum[min(j+dif-1, n)]-sum[limite] + INF)%INF;
- else if(j < limite) dp[i][j] = (sum[limite-1]-sum[max(j-dif, 0)] + INF)%INF;
- dp[i][j] = (dp[i][j]-dp[i-1][j]+INF)%INF;
- }
- }
- //for(int i = 0; i <= k; i++){
- // for(int j = 1; j <= n; j++) cout << dp[i][k] << " ";
- // cout << endl;
- //}
- cout << dp[k][a]<< endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement