题目链接
想要求长度为M的子序列,我们可以拿DP方程来计算,并且这个DP也是比较好看出来的DP[i][j]代表着i后j位置中的所有长度为j的子序列,递推方程为

for(int i=1;i<=n;i++){for(int j=2;j<=m;j++){for(int k=1;k<i;k++){if(a[k]<a[i]) dp[i][j]+=dp[k][j-1]}}}
}

的一个三重循环,但是n^3的暴力一定是会超时的,所以我们可以用树状数组来优化一个前缀和的过程,每次累加过后记得单点修改以免多次被计算。

#include<bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
const int maxn= 1010,mod=1e9+7;
int n,m;
int a[maxn],nums[maxn],cnt,tr[maxn];
int dp[maxn][maxn];
inline void add(int x,int v){while(x<=cnt){tr[x]=(tr[x]+v)%mod;x+=lowbit(x);}
}
inline int query(int x){int ans=0; while(x>0){ans=(ans+tr[x])%mod;x-=lowbit(x);}return ans;
}
int main(){int t;scanf("%d",&t);int cas=0;while(t--){scanf("%d%d",&n,&m);cnt=0;for(int i=1;i<=n;i++){scanf("%d",&a[i]);nums[cnt++]=a[i];}sort(nums,nums+cnt);cnt=unique(nums,nums+cnt)-nums;for(int i=1;i<=n;i++)a[i]=lower_bound(nums,nums+cnt,a[i])-nums+1;for(int i=1;i<=n;i++) dp[i][1]=1;for(int j=2;j<=m;j++){for(int i=1;i<=cnt;i++) tr[i]=0;for(int i=1;i<=n;i++){dp[i][j]=query(a[i]-1);add(a[i],dp[i][j-1]);}}int res=0;for(int i=1;i<=n;i++)res=(res+dp[i][m])%mod;printf("Case #%d: %d\n",++cas,res);}return 0;
}

acwing 297. 赤壁之战 树状数组优化DP 寒假集训相关推荐

  1. E. Pencils and Boxes (树状数组优化dp)

    传送门 1.题意 给出n个数,要求给这些数分组,每组不少于k个. 每组的数之间的差不能大于d.是否能够分组? 2.dp分析 先排序. f[i]f[i]f[i]表示[1~i]能够分组成功. 答案就是f[ ...

  2. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)

    题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...

  3. [SCOI2014]方伯伯的玉米田 //二维树状数组优化DP

    题目: 方伯伯在自己的农田边散步,他突然发现田里的一排玉米非常的不美.这排玉米一共有N株,它们的高度参差不齐.方伯伯认为单调不下降序列很美,所以他决定先把一些玉米拔高,再把破坏美感的玉米拔除掉,使得剩 ...

  4. bzoj 1264: [AHOI2006]基因匹配Match (树状数组优化dp)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1264 思路: n大小为20000*5,而一般的dp求最长公共子序列复杂度是 n*n的,所以我 ...

  5. hdu 5542(树状数组优化dp)

    题意: 求n个数中长度为m的上升子序列的个数 解题思路:dp[i][j]表示第i个数长度为j的上升序列的个数.dp[i][j] = sum{dp[k][j-1] | a[k] < a[i]},这 ...

  6. hdu 4991(树状数组优化dp)

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

  7. 【HDU - 6447】YJJ's Salesman(降维dp,树状数组优化dp)

    题干: YJJ is a salesman who has traveled through western country. YJJ is always on journey. Either is ...

  8. HDU 6447 YJJ's Salesman(树状数组优化DP + 离散化)

    HDU 6447 YJJ's Salesman 题目 给一个二维数组,从(0,0)走到(1e9, 1e9).每次只能走右,下,右下,三个方向.其中只有通过右下走到特定给出的点(村庄)时才会获得分值.问 ...

  9. CF1621G Weighted Increasing Subsequences(离散化+树状数组优化dp+栈维护后缀最大值+计数)

    problem luogu-link solution 显然单独考虑每个 iii 的贡献,即被多少个合法上升子序列包含. 令 x=max⁡{j∣j>i∧aj>ai}x=\max\{j\ | ...

最新文章

  1. CNN 究竟“看”到了什么?曲线检测器是否为可解释性带来了出路?
  2. 5、Scala模式匹配
  3. 《虚拟机深入应用实践》已经出版
  4. SharePoint服务器如果需要安装杀毒软件, 需要注意什么?
  5. Android开发二 什么是Android
  6. Spring有几种事务处理方式?举例说明
  7. [转载]Unix 高手的另外 10 个习惯
  8. 汇编语言(八)之删除数组中为零的元素
  9. 数据类型、常量、变量
  10. 深度学习经典算法 | 蚁群算法解析
  11. uploadify一次上传多个图片:效果展示
  12. Net系列框架-Dapper+AutoFac 基于接口
  13. 一些用JAVA实现的小题目
  14. 二级mysql刷题_计算机二级通手机版(计算机二级刷题软件)V1.1 简化版
  15. 3万字细说数据仓库体系(建议收藏)
  16. 曲率、曲率(对弧长)的导数以及曲率导数(对弧长)的导数的计算
  17. keil软件下载安装与新建工程
  18. html5 show 案例
  19. DevData Talks | 张乐、茹炳晟、应阔浩、任晶磊:研发效能实践的2022年复盘和展望
  20. 自定义控件 自定义属性_自定义您的外壳

热门文章

  1. 怎样用电脑收发短信?
  2. app性能测试怎么做
  3. 前端开发中的跨域问题及解决方案
  4. cv::fitLine用法
  5. 香港科大研发出Germagic杀菌涂层,可杀灭新冠病毒
  6. 大三升大四暑假找工作总结
  7. 58 张图,手把手教会你 Simscape Multibody 物理建模与刚体变换!
  8. 5款类蝉妈妈抖音数据工具推荐
  9. python中的换行与不换行
  10. HTML标签与CSS样式