题目:赤壁之战

一个长度为N的序列A,求A有多少个长度为M的严格递增子序列。

输入格式
  第一行包含整数T,表示共有T组测试数据。 每组数据,第一行包含两个整数N和M。 第二行包含N个整数,表示完整的序列A。

输出格式
  每组数据输出一个结果,每个结果占一行。输出格式为“Case #x: y”,x为数据组别序号,从1开始,y为结果。由于数据可能很大,请你输入对109+7109+7取模后的结果。

数据范围
  1≤T≤1001≤T≤100,
  1≤M≤N≤10001≤M≤N≤1000,
  序列中的整数的绝对值不超过109109。

输入样例:
2
3 2
1 2 3
3 2
3 2 1
输出样例:
Case #1: 3
Case #2: 0
思路:dp[i][j]表示长度为i,当前到 j 个数最长上升序列
状态转移:dp[i][j]+=dp[i][k] {j>k&&a[j]>a[k]}

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1001
using namespace std;
const long long mod=1000000007;
int a[N],dp[N][N],sum;
int main()
{int t;cin>>t;for(int s=1;s<=t;s++){memset(dp,0,sizeof(dp));int n,m;cin>>n>>m;for(int i=1; i<=n; i++) cin>>a[i];a[0]=-(1<<30);dp[0][0]=1;for(int i=1; i<=m; i++){for(int j=1; j<=n; j++){for(int k=0; k<j; k++){if(a[j]>a[k])  dp[i][j] =(dp[i][j]+dp[i-1][k])%mod;}}}long long ans=0;for(int i=1; i<=n; i++){ans=(ans+dp[m][i])%mod;}printf("Case #%d: %lld\n",s,ans);}
}

优化算法:因为每次j增长1,只是k的取值范围只是从1~j 到 1~j+1,所以可以用树状数组储存1到j中的可选值,然后j增长时,增加j+1范围。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define N 1001
#define ll long long
using namespace std;
const long long mod=1000000007;
int a[N],b[N],n,m,dp[N][N],sum,c[N];
int lowbit(int x){return x&(-x);
}
ll ask(int x){ll ans=0;for(;x;x-=lowbit(x)){ans=(ans+c[x])%mod;}return ans;
}
void add(int x,int val){for(;x<=n;x+=lowbit(x)){c[x]=(c[x]+val)%mod;}
}
int main()
{int t;cin>>t;for(int s=1;s<=t;s++){memset(dp,0,sizeof(dp));cin>>n>>m;for(int i=1; i<=n; i++) {cin>>a[i];b[i]=a[i];}sort(b+1,b+1+n);for(int i=1;i<=n;i++) {a[i]=lower_bound(b+1,b+1+n,a[i])-(b-1);//a[i]为在整个数组中的大小排名}// -----离散化,将a[i]将数字缩小,但仍保持相对大小关系dp[0][0]=1;for(int i=1; i<=m; i++){memset(c,0,sizeof(c));if(i==1) add(1,dp[i-1][0]);for(int j=1; j<=n; j++){dp[i][j]=ask(a[j]-1);add(a[j],dp[i-1][j]);}}long long ans=0;for(int i=1; i<=n; i++){ans=(ans+dp[m][i])%mod;}printf("Case #%d: %lld\n",s,ans);}
}

The Battle of Chibi---赤壁之战(DP+数据结构(树状数组))相关推荐

  1. 【HDU 5542】The Battle of Chibi (dp,树状数组优化)

    目录 题目 Description Input Output Sample Input Sample Output Hint Source 思路 朴素dp 优化 代码 题目 Description C ...

  2. C - The Battle of Chibi (dp加树状数组前缀和优化)

    曹操组成大军,要攻打整个华南.于舟很担心.他认为击败曹操的唯一方法是在曹操的军队中配备一个间谍.但曹操的将领和士兵都是忠诚的,不可能说服他们中的任何一个人背叛曹操. 所以余州只剩下一条路,派人假投降曹 ...

  3. [HDOJ5542]The Battle of Chibi(DP,树状数组)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5542 题意:n个数中找m个数,使得从左到右读是上升的子序列.问一共有多少种. dp(i,j)表示取到第 ...

  4. js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)

    本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣​leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...

  5. 数据结构——树状数组

    我们今天来讲一个应用比较广泛的数据结构--树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作.树状数组区间修改单点查 ...

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

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

  7. 数据结构--树状数组

    文章目录 1. 树状数组 2. 单点修改 3. 区间修改 4. 完整代码 5. 参考文献 1. 树状数组 类似数据结构:线段树(Segment Tree) 树状数组 跟 线段树 的区别: 树状数组能做 ...

  8. hdu4281 状态压缩dp(mtsp)+树状数组

    #include<bits/stdc++.h> #define inf 0x3f3f3f3f using namespace std; const int maxn=17; /*这里参考大 ...

  9. 2017西安交大ACM小学期数据结构 [树状数组 离散化]

    Problem E 发布时间: 2017年6月28日 12:53   最后更新: 2017年6月29日 21:35   时间限制: 1000ms   内存限制: 64M 描述 给定一个长度为n的序列a ...

  10. 2017西安交大ACM小学期数据结构 [树状数组,极大值]

    Problem D 发布时间: 2017年6月28日 10:51   最后更新: 2017年6月28日 16:38   时间限制: 1000ms   内存限制: 32M 描述 给定一个长度为n的序列a ...

最新文章

  1. 数据库分享一: MySQL的Innodb缓存相关优化
  2. 华为通过债券转换收购Bakrie Telecom公司16.83%股份
  3. SQL Server中CROSS APPLY和OUTER APPLY的应用详解
  4. linux c++编写访问mysql程序,访问数据库出错,解决方法
  5. am335x linux内核烧写_实时 Linux 抖动分析 Step by step
  6. apache安全—用户登录验证
  7. 【debug】json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
  8. (转载) Java线程池原理
  9. 【jvm】jvm 执行模式设置
  10. Entity Framework 6 Recipes 2nd Edition(12-1)译 - 当SaveChanges( ) 被调用时执行你的代码...
  11. Python补充03 Python内置函数清单
  12. can't init script for
  13. php登录与注册的心得,与discuz实现同步登陆和注册
  14. COOL EDIT PRO 消原声
  15. 一个华为人在华为工作十年的感悟 --徐家骏
  16. 分享30个优秀的网站导航设计案例
  17. jupyter文件自动保存为html,使用jupyter notebook将文件保存为Markdown,HTML等文件格式...
  18. 2023AE软件、Adobe After Effects下载、安装教程
  19. Java久居第一是因为这些
  20. MySql学习-基础篇

热门文章

  1. linux中如何查看mac地址
  2. 大数据学习:大数据就业前景和就业方向
  3. 搬砖的成长之路——VMWare网络原理
  4. sunyueonline.com最新SEO成果显著,百度百科收录“孙越”
  5. 字符串转换,大写变小写,小写变大写
  6. Huggingface Transformers 安装报错 ImportError: /lib64/libc.so.6: version `GLIBC_2.18‘ not found
  7. OpenCV | 直线拟合fitline函数(Python)
  8. PCB板材及叠层结构
  9. [人脸算法]技术方向综述
  10. 功能性需求和非功能性需求