480 C. Riding in a Lift
2014-11-03 08:24
197 查看
蛮简单的dp.
#include <cstdio> const int MOD = 1000000007; void add(int &x, int y) { x += y; while (x < 0) { x += MOD; } while (x >= MOD) { x -= MOD; } } int dp[5005][5005]; int n, a, b, k; void update(int i, int a, int b, int v) { if (a > b) return; if (a < 0) a = 1; if (b > n) b = n; add(dp[i][a], v); add(dp[i][b + 1], -v); } void update_again(int i) { for (int j = 1; j <= n; ++ j) { add(dp[i][j], dp[i][j - 1]); } } int main() { scanf("%d%d%d%d", &n, &a, &b, &k); dp[0][a] = 1; for (int i = 0; i < k; ++ i) { if (i) update_again(i); for (int j = 1; j <= n; ++ j) { if (dp[i][j] != 0) { if (j < b) { update(i + 1, 2 * j - b + 1, j - 1, dp[i][j]); update(i + 1, j + 1, b - 1, dp[i][j]); } if (j > b) { update(i + 1, b + 1, j - 1, dp[i][j]); update(i + 1, j + 1, 2 * j - b - 1, dp[i][j]); } } } } update_again(k); int ans = 0; for (int i = 1; i <= n; ++ i) { add(ans, dp[k][i]); } printf("%d\n", ans); return 0; }
[/code]
相关文章推荐
- Codeforces Round #274 (Div. 2)-E. Riding in a Lift
- Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
- Codeforces Round #274 (Div. 2) E:Riding in a Lift DP + 前缀优化
- 【CODEFORCES】 C. Riding in a Lift
- codeforces 480C C. Riding in a Lift(dp)
- Codeforces Round #274 (Div. 1) C. Riding in a Lift
- Codeforces Round #274 Div.1 C Riding in a Lift --DP
- Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
- Codeforces Round #274 (Div. 2)E. Riding in a Lift
- E. Riding in a Lift(Codeforces Round #274)
- E. Riding in a Lift(Codeforces Round #274)
- Codeforces Round #274 (Div. 1)——C. Riding in a Lift
- CodeForces 479 E. Riding in a Lift
- codeforces Riding in a Lift
- Codeforces Round #274 Div.1 C Riding in a Lift --DP
- Codeforces Round #274 (Div. 1) C. Riding in a Lift 前缀和优化dp
- Codeforces Round #274 (Div. 2) E. Riding in a Lift(DP)
- codeforce 479E - Riding in a Lift
- 【Codeforces Round 274 (Div 2)E】【DP 成段更新 打标记法 滚动数组】Riding in a Lift 乘坐k次电梯避免到达b层的方案数
- [笔记] Codeforces#274 Riding in a Lift (479E) DP