假设我有一个数组1,2,2,10。
长度为3的增加的子序列是1,2,4和1,3,4(基于指数)。
所以答案是2. Problem LINK
我想要一个更好的解决方案,使用BIT树,这可以改善我的解决方案。
我尝试过使用BIT树,但是给了我超出时限的错误。
这是BIT implementation Code。
我也试过直接的方法
for (i = 1; i<n;i++)
dp[i, 1] = 1
for (i = 1; i<n;i++)
for (j = 0; j<i-1;j++)
if array[i] > array[j]
for (p = 2; p<k;p++)
dp[i, p] += dp[j, p - 1]
请帮帮我
答案 0 :(得分:1)
希望这会有所帮助..
int dp[51][100001];
void update(int bit[], int idx, int val){
for(int x = idx;x <= 100000;x += x & -x){
bit[x] += val;
if(bit[x] >= MOD) bit[x] -= MOD;
}
}
int query(int bit[], int idx){
int ret = 0;
for(int x = idx;x > 0;x -= x & -x){
ret += bit[x];
if(ret >= MOD) ret -= MOD;
}
return ret;
}
int main(){
int N,K;
scanf("%d %d",&N,&K);
int ans = 0;
for(int i = 0,x;i < N;++i){
scanf("%d",&x);
for(int k = K;k > 1;--k)
update(dp[k],x + 1,query(dp[k - 1],x));
update(dp[1],x + 1,1);
}
printf("%d\n",query(dp[K],100000));
return 0;
}
Explanation:
input: 1
For input 1:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 // update for X=2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
input: 1 2
For input 2:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 2 0 0 0 2 0 0 0 0 0 0 0 // update for X=3, length 1; got 2 increasing subsequence with length 1
0 0 0 1 1 0 0 0 1 0 0 0 0 0 0 0 // update for X=3, length 2; got 1 increasing subsequence with length 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
input: 1 2 2
For input 2:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 2 3 0 0 0 3 0 0 0 0 0 0 0 // update for X=3, length 1; got 3 increasing subsequence with length 1
0 0 0 2 2 0 0 0 2 0 0 0 0 0 0 0 // update for X=3, length 2; got 2 increasing subsequence with length 2
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 // But you have no increasing subsequence with length 3
input 1 2 2 10
For input 10:
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 2 3 0 0 0 3 0 0 1 1 0 0 0 // update for X=11, length 1
0 0 0 2 2 0 0 0 2 0 0 3 3 0 0 0 // update for X=11, length 2
0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 // update for X=11, length 3; got 2 increasing subsequence with length 3; tihs is calculate with help of length 2
每次,你取一个值..计算你找到多少个增加的子序列并逐渐更新长度为3,2,1