Ural1523-K-inversions
2016-11-21 11:39
337 查看
给定n个数字和一个k,求长度为k的下降子序列的个数。
dp[i][j]表示以a[i]为结尾,长度为j的下降子序列的个数。
因此:
dp[i][j]=Σ(dp[k][j−1]),其中k属于[1, i),且a[k] > a[i].
维护一个树状数组以便于快速求出所有满足条件的dp[k][j-1]的总和。
先初始化dp数组,将dp[i][1]置为1,然后,更新dp[i][j],再在树状数组对应的a[i]处增加dp[i][j-1]的值。
最后遍历dp[i][k]即可。
dp[i][j]表示以a[i]为结尾,长度为j的下降子序列的个数。
因此:
dp[i][j]=Σ(dp[k][j−1]),其中k属于[1, i),且a[k] > a[i].
维护一个树状数组以便于快速求出所有满足条件的dp[k][j-1]的总和。
先初始化dp数组,将dp[i][1]置为1,然后,更新dp[i][j],再在树状数组对应的a[i]处增加dp[i][j-1]的值。
最后遍历dp[i][k]即可。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 20000 + 5; const int maxk = 15; const int mod = 1e9; int a[maxn]; int dp[maxn][maxk]; int bit[maxn]; inline int lowbit(int x) { return x & -x; } void add(int x, int delta) { for (int i = x; i <= maxn; i += lowbit(i)) { bit[i] = (bit[i] + delta) % mod; } } int sum(int x) { int ret = 0; for (int i = x; i > 0; i -= lowbit(i)) { ret = (ret + bit[i]) % mod; } return ret; } int main(int argc, char const *argv[]) { int n, k; scanf("%d%d", &n, &k); for (int i = 1; i <= n; i++) { scanf("%d", &a[i]); dp[i][1] = 1; } for (int i = 2; i <= k; i++) { memset(bit, 0, sizeof(bit)); for (int j = 1; j <= n; j++) { dp[j][i] = (sum(n) - sum(a[j]) + mod) % mod; add(a[j], dp[j][i-1]); } } int ans = 0; for (int i = 1; i <= n; i++) { ans = (ans + dp[i][k]) % mod; } printf("%d\n", ans); return 0; }
相关文章推荐
- ural 1523 K-inversions(dp+树状数组)
- URAL 1523.K-inversions (树状数组)
- ural 1987. Nested Segments【离散化+贪心+线段树】
- URAL 1205 By the Underground or by Foot?(SPFA)
- ural 1748. The Most Complex Number
- URAL 1519 Formula 1 【插头DP模板题】
- 【URAL 1223】Chernobyl’ Eagle on a Roof(传说中的DP神优化之鹰蛋)
- URAL 1218 Episode N-th: The Jedi Tournament(强连通分量)(缩点)
- URAL - 1057 Amount of Degrees--数位dp
- Ural1079-Maximum
- Ural1028-Stars
- ural 1313
- ural 1496
- Ural1540 Battle for the Ring
- [BZOJ]|[Ural] Formula 1-----插头DP入门
- URAL - 2102 Michael and Cryptography 分解质因数+优化
- 【枚举】URAL - 2081 - Faulty dial
- URAL 2072 Kirill the Gardener 3
- bzoj1974&jzoj1523 [Sdoi2010]auction 代码拍卖会
- ural2073 Log Files【细心题】