dp[i][j] 表示末尾数字为i 长度为j的上升子序列个数，但是dp数组是在树状数组的update函数中进行更新。

update(i, val, j)函数表示在i的位置加上val，更新dp[i][j]。

sum(i, j)就是求出末尾数字小于等于i 且长度为j的子序列有多少个。

``` //#pragma comment(linker, "/STACK:102400000, 102400000")
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <vector>
#include <cmath>
#include <ctime>
#include <list>
#include <set>
#include <map>
using namespace std;
typedef __int64 LL;
typedef pair <int, int> P;
const int N = 1e5 + ;
int a[N], n;
LL dp[N][];

void update(int i, LL val, int c) {
for( ; i <= n; i += (i&-i))
dp[i][c] += val;
}

LL sum(int i, int c) {
LL s = ;
for( ; i >= ; i -= (i&-i))
s += dp[i][c];
return s;
}

LL Cnm(LL a, LL b) {
if(b > a)
return ;
LL res1 = , res2 = ;
for(LL i = ; i < b; ++i) {
res1 *= (a - i);
res2 *= (b - i);
}
return res1 / res2;
}

int main()
{
int k;
scanf("%d %d", &n, &k);
k++;
LL res = ;
for(int i = ; i <= n; ++i) {
scanf("%d", a + i);
for(int j = ; j <= k; ++j) {
if(j == ) {
update(a[i], , j);
continue;
}
LL temp = sum(a[i] - , j - );
if(temp) {
update(a[i], temp, j);
}
}
}
printf("%lld\n", sum(n, k));
return ;
}```

## Codeforces 597C. Subsequences (树状数组+dp)的更多相关文章

1. codeforces 597C （树状数组+DP）

题目链接:http://codeforces.com/contest/597/problem/C 思路:dp[i][j]表示长度为i,以j结尾的上升子序列,则有dp[i][j]= ∑dp[i-1][k ...

2. CodeForces - 314C Sereja and Subsequences （树状数组+dp）

Sereja has a sequence that consists of n positive integers, a1, a2, ..., an. First Sereja took a pie ...

3. HDU2227Find the nondecreasing subsequences（树状数组+DP）

题目大意就是说帮你给出一个序列a,让你求出它的非递减序列有多少个. 设dp[i]表示以a[i]结尾的非递减子序列的个数,由题意我们可以写出状态转移方程: dp[i] = sum{dp[j] | 1&l ...

4. hdu 3030 Increasing Speed Limits (离散化+树状数组+DP思想)

Increasing Speed Limits Time Limit: 2000/10000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java ...

5. hdu 2227(树状数组+dp)

Find the nondecreasing subsequences Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/3 ...

6. hdu 4991(树状数组+DP)

Ordered Subsequence Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

7. hdu 4622 Reincarnation trie树+树状数组/dp

题意:给你一个字符串和m个询问,问你l,r这个区间内出现过多少字串. 连接:http://acm.hdu.edu.cn/showproblem.php?pid=4622 网上也有用后缀数组搞得. 思路 ...

8. HDU 6348 序列计数 (树状数组 + DP)

序列计数 Time Limit: 4500/4000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Total Subm ...

9. [Codeforces261D]Maxim and Increasing Subsequence——树状数组+DP

题目链接: Codeforces261D 题目大意:\$k\$次询问,每次给出一个长度为\$n\$的序列\$b\$及\$b\$中的最大值\$maxb\$,构造出序列\$a\$为\$t\$个序列\$b\$连接而成,求\$a\$的最长上升子 ...

## 随机推荐

1. salesforce 零基础学习（五十九）apex:param使用以及相关的疑惑

做web项目难免要从一个页面传参数,解析参数中的值进行相关处理以后跳转到其他页面,VF中也不例外.使用传参的标签为apex:param. apex:param标签不可以单独使用,需要作为子标签嵌套在相 ...

2. SpringMVC上传文件的三种方式(转)

直接上代码吧,大伙一看便知 这时:commonsmultipartresolver 的源码,可以研究一下 http://www.verysource.com/code/2337329_1/common ...

3. &lt;-0基础学python.第2课-&gt;

今天闲着无聊,有想鼓捣Python了,想实现网络爬虫,帮我下载音乐的功能. 现在网上找了相关的一些文章教程 http://jecvay.com/2014/09/python3-web-bug-seri ...

4. CentOs5.8下安装Oracle12C

12C安装向导: http://docs.oracle.com/database/121/LTDQI/toc.htm 12C下载地址: http://www.oracle.com/technetwor ...

5. SVM推导

标准最大margin问题 假设data是linear seperable的 优化目标 希望 margin(w),i.e, 最小的点到直线的距离 最大 即是要得到最右的线,它对噪声的鲁棒性最好 得到的分 ...

6. 手动安装svn到eclipse

7. 汉诺塔问题的java递归实现

import java.util.Scanner; public class Hanoi { int count=0; public void hanoi(int n,char A,char B,ch ...

8. jquery全选框的实现

函数实现的话: head里加入函数实现 <script language="javascript" type="text/javascript"> ...

9. poptest老李谈分布式与集群 2

集群分类 Linux集群主要分成三大类( 高可用集群, 负载均衡集群,科学计算集群) 高可用集群( High Availability Cluster)负载均衡集群(Load Balance Clus ...

10. D# 语法

这篇文章 随意 的 记录 关于 D# 语法的想法 . template 和 interface   同时作为一等公民 D# 是程序员的语言,不需要太多包装和修饰, D# 是 简单的, 编译器 和 ID ...