HDU4991 Ordered Subsequence (dp+樹狀陣列+離散化)
題目連結:http://acm.hdu.edu.cn/showproblem.php?pid=4991
題目的意思是求長度為 m 的上升序列有多少個;
設DP[I][J]表示 以第i個元素結尾的 長度為j的序列的個數
dp[i][j]=sum(dp[k][j-1]) (i>k &&a[i]>a[k])
數字有1萬個,先離散化一下,把所有數字對應到1到n之間,然後用陣列陣列進行求和就好
程式碼如下:
#include <iostream>
#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
const int N = 10010;
const int mod = 123456789;
typedef long long LL;
LL c[N],a[N],b[N];
int n,m;
LL dp[N][104];
int lowbit(int x)
{
return x & (-x);
}
void update(int pos,LL val)
{
while(pos <= n)
{
c[pos] += val;
pos += lowbit(pos);
}
}
LL query(int pos)
{
LL res = 0;
while(pos > 0)
{
res = (res+c[pos])%mod;
pos -= lowbit(pos);
}
return res;
}
int main()
{
while(scanf("%d%d",&n,&m)!=EOF)
{
for(int i=1;i<=n;i++)
{
scanf("%I64d",&a[i]);
b[i] = a[i];
}
sort(b+1,b+n+1);
memset(dp,0,sizeof(dp));
for(int i=1;i<=n;i++)
dp[i][1] = 1;
for(int j=2;j<=m;j++)
{
memset(c,0,sizeof(c));
for(int i=1;i<=n;i++)
{
int ind = lower_bound(b+1,b+n+1,a[i])-b;
dp[i][j] = query(ind-1);
update(ind,dp[i][j-1]);
}
}
LL ans = 0;
for(int i=1;i<=n;i++)
ans = (ans + dp[i][m])%mod;
printf("%I64d\n",ans);
}
return 0;
}
相關文章
- hdu4325 樹狀陣列+離散化陣列
- 【dp+離散化+線段樹優化】Paint優化AI
- hdu5489 ||2015合肥網路賽1006 dp+離散化樹狀陣列優化陣列優化
- HDU 5862 Counting Intersections(樹狀陣列+掃描線+離散化)陣列
- LeetCode 493. 翻轉對(歸併排序 || 離散化+樹狀陣列)LeetCode排序陣列
- Leetcode 327. 區間和的個數 (字首和 + 離散化 + 樹狀陣列)LeetCode陣列
- hdu 4368 樹狀陣列 離線維護陣列
- 樹狀陣列陣列
- SPOJ DQUERY (離線數狀陣列||線上主席樹)陣列
- 解析樹狀陣列陣列
- HDU 3530 Subsequence (dp+單調佇列)佇列
- 樹狀陣列詳解陣列
- 樹狀陣列基礎陣列
- poj 2481 樹狀陣列陣列
- hdu 3874 樹狀陣列陣列
- 二維樹狀陣列陣列
- 樹狀陣列模板題 & (樹狀陣列 1:單點修改,區間查詢)陣列
- 樹狀陣列和逆序對陣列
- hdu 5147 樹狀陣列陣列
- 樹狀陣列快速入門陣列
- 離散化
- 樹狀陣列模板+習題集陣列
- 樹狀陣列3種基本操作陣列
- 學習筆記----樹狀陣列筆記陣列
- 樹狀陣列upc1976陣列
- CSU 4441 Necklace (樹狀陣列/LIS)陣列
- 樹狀陣列(我是真小白)陣列
- 資料結構——樹狀陣列資料結構陣列
- 變化的區間樹狀陣列,單點查詢陣列
- 線段樹+差分——【模板】樹狀陣列2陣列
- hdu 4836 The Query on the Tree(線段樹or樹狀陣列)陣列
- 10:Challenge 3(樹狀陣列直接修改)陣列
- POJ 3928 Ping pong(樹狀陣列)陣列
- HDU 1556 Color the ball(線段樹|樹狀陣列)陣列
- CF 293 E Close Vertices (樹的分治+樹狀陣列)陣列
- HDU 1166 敵兵佈陣 (樹狀陣列)陣列
- HDU 1166 敵兵佈陣(樹狀陣列)陣列
- HDU 4427 Math Magic【dp+優化+滾動陣列】【好題】優化陣列