Codeforces 722E [DP]
来源:互联网 发布:潍坊网络推广招聘 编辑:程序博客网 时间:2024/05/20 17:39
Solution
以前做过一道题是这样的
- 给定
n∗m 的网格图和k 个点,求不定过某些点从(1,1) 走到(n,m) 的方案数。
这个的话直接
这道题也差不多,因为电池的衰减只有
#include <cstdio>#include <cstdlib>#include <iostream>#include <algorithm>using namespace std;const int N = 101010;const int M = 2020;const int MOD = 1000000007;typedef long long ll;inline char get(void) { static char buf[100000], *S = buf, *T = buf; if (S == T) { T = (S = buf) + fread(buf, 1, 100000, stdin); if (S == T) return EOF; } return *S++;}inline void read(int &x) { static char c; x = 0; for (c = get(); c < '0' || c > '9'; c = get()); for (; c >= '0' && c <= '9'; c = get()) x = x * 10 + c - '0';}int n, m, k, s, lim, ans;struct Point { int x, y; Point (int _x = 0, int _y = 0):x(_x), y(_y) {} inline friend bool operator <(const Point &a, const Point &b) { return a.x == b.x ? a.y < b.y : a.x < b.x; }};Point a[M];int fac[N << 1], inv[N << 1];int dp[N][100];inline int Pow(int a, int b) { int c = 1; while (b) { if (b & 1) c = (ll)c * a % MOD; b >>= 1; a = (ll)a * a % MOD; } return c;}inline int Inv(int x) { return Pow(x, MOD - 2);}inline int C(int n, int m) { return (ll)fac[n] * inv[m] % MOD * inv[n - m] % MOD;}inline int Calc(int n, int m) { return C(n + m, n);}int main(void) { read(n); read(m); read(k); read(s); inv[1] = 1; lim = 25; for (int i = 2; i <= 200000; i++) inv[i] = (ll)(MOD - MOD / i) * inv[MOD % i] % MOD; fac[0] = inv[0] = 1; for (int i = 1; i <= 200000; i++) { fac[i] = (ll)fac[i - 1] * i % MOD; inv[i] = (ll)inv[i - 1] * inv[i] % MOD; } for (int i = 1; i <= k; i++) { read(a[i].x); read(a[i].y); } sort(a + 1, a + k + 1); if (a[k].x == n && a[k].y == m) s -= s / 2; else a[++k] = Point(n, m); if (a[1].x != 1 || a[1].y != 1) { s *= 2; a[++k] = Point(1, 1); } sort(a + 1, a + k + 1); dp[1][0] = 1; for (int i = 2; i <= k; i++) { dp[i][1] = Calc(a[i].x - 1, a[i].y - 1); for (int d = 2; d <= lim; d++) { for (int j = 1; j < i; j++) { if (a[j].y > a[i].y) continue; dp[i][d] += (ll)dp[j][d - 1] * Calc(a[i].x - a[j].x, a[i].y - a[j].y) % MOD; dp[i][d] -= (ll)dp[j][d] * Calc(a[i].x - a[j].x, a[i].y - a[j].y) % MOD; dp[i][d] = (dp[i][d] % MOD + MOD) % MOD; } } } ans = 0; for (int i = 1; i <= lim; i++) { s -= s / 2; ans = ans + (ll)(dp[k][i] - dp[k][i + 1] + MOD) * s % MOD; ans %= MOD; } cout << (ll)ans * Inv(Calc(n - 1, m - 1)) % MOD << endl; return 0;}
阅读全文
2 0
- Codeforces 722E [DP]
- 【dp】codeforces 83E
- codeforces-731E-dp
- Codeforces 748E dp
- Codeforces 416E DP
- codeforces 526E E. Transmitting Levels(dp)
- Codeforces 838E E. Convex Countour DP
- codeforces 215E 数位DP
- Codeforces 14E Camels (DP)
- codeforces 23E 树形DP
- CodeForces 215E 数位DP
- codeforces 23E 树形DP
- codeforces 148E Porcelain (dp)
- codeforces 621E(dp, matrices)
- codeforces-148E-Porcelain【DP】
- Codeforces 645E (构造 DP)
- Codeforces 622E (树DP)
- Codeforces 148 E Porcelain【dp】
- 神经网络与深度学习学习笔记:L2正则化
- 解决Celery进程重启后,正在进行中的任务丢失或者标记为失败
- mysql/servlet用户名密码判断是否存在数据库
- Java知识复习(集合)
- Mongodb数据更新命令、操作符
- Codeforces 722E [DP]
- 理解python的with as 语句
- ES6-Promise
- GFLW hint settings.
- git的常用命令
- postman中 form-data、x-www-form-urlencoded、raw、binary的区别
- java数据结构-简单的模仿实现HashMap类的部分函数
- Spring Security(07)——缓存UserDetails
- 语义分析的一些方法(上篇)