首页 > 其他分享 >金牌导航-数据结构优化DP

金牌导航-数据结构优化DP

时间:2023-12-20 21:13:31浏览次数:32  
标签:ch int 例题 数据结构 优化 金牌 DP

数据结构优化DP

例题A题解

设 \(f_{i,j}\) 表示以第 \(i\) 位为结尾,长度为 \(j\) 的严格单调上升子序列的数量。
那么显然有 \(f_{i,j}=\sum_{k=1}^{i-1}f_{k,j-1}\times(a_k<a_i)\)
然后发现这玩应 \(O(n^2m)\) 直接寄掉了。
考虑优化。
发现只有当 \(a_k<a_i\) 时才会有贡献。
于是离散化+权值BIT就完事了。

例题A代码

#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
    int x = 0, f = 1;char ch = getchar();
    while(ch < '0' || ch > '9'){if(ch == '-') f=  -1;ch = getchar();}
    while(ch >= '0' && ch <= '9'){x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
    return x * f;
}
const int maxn = 1e5 + 10, mod = 123456789;
int n, a[maxn], m;
vector<int> vec;
struct BIT{
    int c[maxn];
    inline int lowbit(int x){return x & (-x);}
    void upd(int x,int upd){for(;x <= n;x += lowbit(x))c[x] = (c[x] + upd) % mod;}
    int qry(int x){int ans = 0;for(;x;x -= lowbit(x))ans = (ans + c[x]) % mod;return ans;}
    void clear(){for(int i = 0;i <= n;i++)c[i] = 0;}
}tree[101];
signed main(){
    while(scanf("%lld%lld",&n,&m) != EOF){
        for(int i = 1;i <= n;i++){vec.push_back(a[i] = read());}
        sort(vec.begin(),vec.end());vec.erase(unique(vec.begin(),vec.end()),vec.end());
        int ans = 0;
        for(int i = 1;i <= n;i++){
            int x = lower_bound(vec.begin(),vec.end(),a[i]) - vec.begin() + 1;
            tree[1].upd(x,1);
            for(int j = 1;j <= m;j++)
                tree[j].upd(x,tree[j - 1].qry(x - 1));
        }
        ans = tree[m].qry(n);
        printf("%lld\n",ans);
        for(int i = 1;i <= m;i++)tree[i].clear();vec.clear();
    }
    return 0;
}

标签:ch,int,例题,数据结构,优化,金牌,DP
From: https://www.cnblogs.com/Call-me-Eric/p/17917578.html

相关文章

  • TQX 的 DP AAgain!
    闲话:这确实抽象,将所有人给干离线了……不如叫做TQX的离线DPQwQDP基本思路就是找一个比较好的能够描绘问题的状态,想怎么转移,再进行优化。--TQX背包DPloj6089.小Y的背包计数问题根号分治优化背包,大概就是利用\(cnt\timessiz\gecap\)将多重变为完全,然后统......
  • python 数据结构与算法知识图
    1.算法思想:递归、分治(归并排序、二分查找、快速排序)、贪心(贪心策略排序+当前最优)、动态规划(最优子结构+递推式)、回溯(解空间:排列树+子集树、深度搜索+剪枝)、分支限界(解空间:排列树+子集树、广度搜索+剪枝))2.排序算法:(low:冒泡、插入、选择;mid:快排、归并、堆排(完全二叉树),其他:桶排序、基......
  • wordpress博客系统
    wordpress博客系统LNMP:Linux+nginx+mysql+php一个操作系统+web网站+一个数据库存放数据+后端编程语言基于红帽操作系统来搭建1.需要一个本地yum仓库[[email protected]]#vimlocal.repo[local]name=localbaseurl=file:///mediaenabled=1gpgcheck=0[root@ser......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • Databend 源码阅读: Meta-service 数据结构
    作者:张炎泼(XP)DatabendLabs成员,Databend分布式研发负责人https://github.com/drmingdrmer引言Databend是一款开源的云原生数据库,采用Rust语言开发,专为云原生数据仓库的需求而设计。面向云架构:Databend是完全面向云架构的数据库,可以在云环境中灵活部署和扩展简介|......
  • subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero
    一、原因pytorch版本大于1.5二、解决1、降低pytorch版本将pytorch版本降到1.5以下2、禁用ninjiapytorch默认使用ninjia作为backend,将其禁用。替换为以下代码setup(...,cmdclass={#'build_ext':BuildExtension,'build_ext':BuildExtensi......
  • 宝塔面板搭建部署wordpress个人网站实现无公网即可远程访问(小白建站福音!!)
    WordPress是一个非常灵活和强大的博客建站平台,适用于各种不同类型的网站建设需求。简单几步实现宝塔面板结合cpolar工具实现无公网远程访问,无需云服务器即可发布自己的网站到公网访问1.环境安装wordpress运行需要PHP环境,我们在宝塔商店中我们搜索PHP8.0版本安装 然后安......
  • 金牌导航-期望概率DP
    期望概率DP例题A题解首先,对于随机变量\(X\)如果设随机变量\(Y\)的取值集合是\(I(Y)\),那么有全期望公式\[E(X)=\sum_{y\inI(Y)}E(X|Y=y)\timesP(Y=y)\]其中,\(E(X|Y=y)\)表示在\(Y=y\)的条件下\(X\)的期望取值。对于这道题,长度增加一对答案的贡献是\(3E^2(x)+3E(x......
  • 数据结构
    数据结构有:1.数组;2.栈;3.队列;4.链表(单链表、双向链表、循环链表);5.数;6.散列表;7.堆;8.图。一、数组内存连续,可通过元素下标访问。二、栈先进后出三、队列先进先出四、链表物理存储不连续,因为存储了相邻元素的物理地址,所以逻辑上连续。五、树每个节点有零个或多个子节点;没......
  • 状压 DP 学习笔记
    前言2023.8.30开始停课集训。开始补\(CSP-S\)的知识点,先打算来学状压\(DP\)。定义状压\(DP\)的全称是状态压缩动态规划,也是动态规划中的一种。但是其与普通\(DP\)不同的是它将某种状态(一般为二进制\(01\)串,\(1\)表示选,\(0\)表示不选。也有其它进制)作为了\(dp\)......