• 题意:给你一组数,求最长的严格上升子序列及个数(mod 1e9+7)

  • 题解:用动态规划来求LIS,记\(dp[i]\)是数组中第i个位置上的数的LIS最优解,我们遍历一遍原数组,然后找i位置前的LIS,如果\(a[j]<a[i]\)并且\(dp[j]+1>dp[i]\)那么当前i位置的最优解就应该更新成\(dp[j]+1\).然后我们再记一个\(res[i][length]\),表示i位置上长度为length的LIS的个数.最后统计一下长度最长的子序列有多少个就行了.

  • 代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    #include <stack>
    #include <queue>
    #include <vector>
    #include <map>
    #include <set>
    #include <unordered_set>
    #include <unordered_map>
    #define ll long long
    #define fi first
    #define se second
    #define pb push_back
    #define me memset
    const int N = 1e6 + 10;
    const int mod = 1e9 + 7;
    using namespace std;
    typedef pair<int,int> PII;
    typedef pair<long,long> PLL; int t;
    int n,a[N];
    ll res[2000][2000];
    int dp[N]; int main() {
    ios::sync_with_stdio(false);
    cin>>t;
    while(t--){
    cin>>n;
    me(res,0,sizeof(res));
    for(int i=1;i<=n;++i){
    cin>>a[i];
    dp[i]=1;
    res[i][1]=1;
    }
    for(int i=1;i<=n;++i){
    for(int j=1;j<i;++j){
    if(a[j]<a[i]){
    dp[i]=max(dp[i],dp[j]+1);
    res[i][dp[j]+1]=(res[i][dp[j]+1]+res[j][dp[j]])%mod;
    }
    }
    }
    sort(dp+1,dp+1+n);
    ll cnt=0;
    for(int i=1;i<=n;++i){
    cnt=(cnt+res[i][dp[n]])%mod;
    }
    printf("%d %lld\n",dp[n],cnt);
    }
    return 0;
    }

最新文章

  1. sublime Text 3 字体
  2. 安装Oracle问题总结
  3. Mac下用brew安装nginx
  4. Longest Valid Parentheses
  5. Thymeleaf学习内容
  6. Hadoop集群(第2期)_机器信息分布表
  7. webservice接口的发布
  8. java_jdbc_3层 解耦
  9. 【python自动化第四篇:python入门进阶】
  10. 【转】Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
  11. Convert Sorted List to Binary Search Tree ------C++ 递归创建平衡二叉查找树
  12. jQuery圆形统计图实战开发
  13. php基础的第一天 任务点滴,event对象方法概括 ing....
  14. Day03——类、值和对象
  15. zookeoper在root下设置开机启动
  16. 双击打开Jar文件
  17. 通读cheerio API ——NodeJs中的jquery
  18. MTK Android software Tools工具的说明
  19. 方向导数,梯度和梯度下降之BGD,SGD
  20. CS229 6.5 Neurons Networks Implements of Sparse Autoencoder

热门文章

  1. .NET 调整图片尺寸(Resize)各种方法
  2. 【MySQL】汇总数据 - avg()、count()、max()、min()、sum()函数的使用
  3. Oracle 10g 如何调整 sga_max_size 与 sga_target
  4. CTS相关的几个表
  5. 环境配置-Java-02-卸载
  6. es_python_操作
  7. 前端面试之HTTP
  8. # Set the asyncio reactor&#39;s event loop as global # TODO: Should we instead pass the global one into the reactor?
  9. Python学习【第2篇】:基本数据类型
  10. poj2631