题目传送门

题意:问n长度的序列,找出长度m的上升子序列的方案数。

分析:这个问题就是问:dp[i][j] = sum (dp[i-1][k]) (1 <= k <= n, a[k] < a[j]),当前长度i一层,最后下标j一层,之前的最后下标k一层,这样是n^3的复杂度。然后树状数组可以优化j,k的复杂度,就是j扫描一遍的同时,将a[j]的信息更新到树上,那么扫描就可以用 logn时间统计出k的信息,在这之前先对a[]离散化。

/************************************************
* Author        :Running_Time
* Created Time  :2015/10/21 星期三 13:20:36
* File Name     :C.cpp************************************************/#include <cstdio>
#include <algorithm>
#include <iostream>
#include <sstream>
#include <cstring>
#include <cmath>
#include <string>
#include <vector>
#include <queue>
#include <deque>
#include <stack>
#include <list>
#include <map>
#include <set>
#include <bitset>
#include <cstdlib>
#include <ctime>
using namespace std;#define lson l, mid, rt << 1
#define rson mid + 1, r, rt << 1 | 1
typedef long long ll;
const int N = 1e3 + 10;
const int INF = 0x3f3f3f3f;
const int MOD = 1e9 + 7;
const double EPS = 1e-8;
struct BIT  {int c[N], SZ;void add(int &a, int b) {a += b;while (a >= MOD)    a -= MOD;}void init(int n)    {memset (c, 0, sizeof (c));SZ = n;}void updata(int i, int x)   {while (i <= SZ) {add (c[i], x);  i += i & (-i);}}int query(int i)    {int ret = 0;while (i)   {add (ret, c[i]);    i -= i & (-i);}return ret;}
}bit;
int a[N], A[N];
int dp[N][N];void compress(int n) {sort (A, A+n);int nn = unique (A, A+n) - A;for (int i=0; i<n; ++i)    {a[i] = lower_bound (A, A+n, a[i]) - A + 1;}
}int main(void)    {int T, cas = 0; scanf ("%d", &T);while (T--) {int n, m;  scanf ("%d%d", &n, &m);bit.init (n);for (int i=0; i<n; ++i)    {scanf ("%d", &a[i]);A[i] = a[i];}compress (n);memset (dp, 0, sizeof (dp));for (int i=0; i<n; ++i) dp[1][i] = 1;int ans = 0;for (int i=2; i<=m; ++i)    {bit.init (n);for (int j=0; j<n; ++j) {dp[i][j] = bit.query (a[j] - 1);bit.updata (a[j], dp[i-1][j]);}}for (int i=0; i<n; ++i) bit.add(ans, dp[m][i]);printf ("Case #%d: %d\n", ++cas, ans);}return 0;
}

  

转载于:https://www.cnblogs.com/Running-Time/p/4923805.html

DP+BIT(优化复杂度) UESTC 1217 The Battle of Chibi相关推荐

  1. POJ3666 线性dp+维度优化

    POJ3666 线性dp+维度优化 题面 POJ3666 题面 思路 首先是重要的归纳法寻求思路的思想,在满足S最小化的前提下,假设存在一种构造前k位序列B的方案,即已经构造B1B2⋯BkB_1B_2 ...

  2. 【bzoj5197】[CERC2017]Gambling Guide 期望dp+堆优化Dijkstra

    题目描述 给定一张n个点,m条双向边的无向图. 你要从1号点走到n号点.当你位于x点时,你需要花1元钱,等概率随机地买到与x相邻的一个点的票,只有通过票才能走到其它点. 每当完成一次交易时,你可以选择 ...

  3. [蓝桥杯][算法提高VIP]合并石子(区间dp+平行四边形优化)

    题目描述 在一条直线上有n堆石子,每堆有一定的数量,每次可以将两堆相邻的石子合并,合并后放在两堆的中间位置,合并的费用为两堆石子的总数.求把所有石子合并成一堆的最小花费. 输入 输入第一行包含一个整数 ...

  4. SP22343 NORMA2 - Norma(分治优化复杂度)

    SP22343 NORMA2 - Norma 一看就像是一个序列分治的题目,求解序列上区间长度乘区间最大值最小值的和,然后考虑如何处理,分治之后每次就可以将右边部分分成三部分,然后对于这三部分可以批量 ...

  5. 【Codeforces 321E / BZOJ 5311】【DP凸优化】【单调队列】贞鱼

    目录 题意: 输入格式 输出格式 思路: DP凸优化的部分 单调队列转移的部分 坑点 代码 题意: 有n条超级大佬贞鱼站成一行,现在你需要使用恰好k辆车把它们全都运走.要求每辆车上的贞鱼在序列中都是连 ...

  6. 利用Runloop优化流畅度

    利用Runloop优化流畅度 我们可以对runloop添加观察者,当观察到状态为kCFRunLoopExit,kCFRunLoopBeforeWaiting的时候,做一些耗时的处理,废话不说,直接上代 ...

  7. HDU-5542-The Battle of Chibi【树状数组+dp】

    HDU-5542-The Battle of Chibi[树状数组+dp] Time Limit: 6000/4000 MS (Java/Others) Memory Limit: 65535/655 ...

  8. HDU - 5542 The Battle of Chibi(树状数组+DP)

    UVA - 12983 The Battle of Chibi(树状数组+DP) HDU - 5542 The Battle of Chibi(树状数组+DP) #include<cstdio& ...

  9. 【CF1189F】Array Beauty【dp】【复杂度玄学优化】

    传送门 题意:给一个长度为NNN的序列aaa,从中选出kkk个,定义一个序列的美丽度为最接近的两个数的差的绝对值,求所有方案的美丽度之和模998244353998244353998244353. N≤ ...

最新文章

  1. What are HANA's models of cloud computing, and which should I choose?
  2. S11 Linux系统管理命令
  3. c#:细说时区、DateTime和DateTimeOffset在国际化中的应用
  4. NB-IoT与LoraWan技术分析与前景展望
  5. arp协议属于哪一层_网络工程师(3):详解ARP协议
  6. kafka使用_Kafka精华问答 | kafka的使用场景是什么?
  7. Appium移动端自动化测试之元素定位(三)
  8. BZOJ.2428.[HAOI2006]均分数据(随机化贪心/模拟退火)
  9. 调度 Cmax和∑Ci是什么区别
  10. php怎么输出指定数据类型,PHP变量的输出和数据类型
  11. python pywinauto 自动控制微信, 关键字回复、收款、定时任务, 代替人工成为微信客服
  12. copula 重现期 matlab,合肥市干旱识别及基于Copula的特征值重现期分析
  13. Sqlite数据库锁死问题
  14. Tensorflow 2.0 学习(chapter 6)
  15. 数据库优化(超级详细),转文,值得一读
  16. 您有一份《七夕安全须知》待查收
  17. 做容器就要做“专”!云宏 Rancher联合解决方案WinGarden2.0容器云平台正式发布!
  18. uva 571 - Jugs
  19. uva 1471 Defense Lines
  20. 重温电视剧《陆小凤之凤舞九天》

热门文章

  1. 设置ComboBox控件的提示内容.
  2. 测试工程师python面试常问问题_面试测试工程师一般会问些什么?
  3. Java NIO学习篇之缓冲区CharSet详解
  4. Kubernetes 证书过期
  5. 12linux目录结构13Linux目录详解
  6. 天池notebook
  7. del服务器如何收系统日志,利用Rsyslog集中收集系统日志和用户操作记录以及相关处理方法...
  8. java实现字块反转_java实现字符串反转
  9. cv mat 灰度值和_c++ 访问OpenCV中灰度图像的像素值
  10. C语言学习及项目开发所遇问题总集(一)---Mr.Zhang