首页 > 其他分享 >2024 年春节集训 _ 第二课 - 数据结构优化动态规划

2024 年春节集训 _ 第二课 - 数据结构优化动态规划

时间:2024-03-05 15:48:27浏览次数:22  
标签:const 第二课 int long 2024 数据结构 dp define

【例题 \(1\) 】 递增子序列

\(\color{white}{link}\)

考虑 \(dp.\)

\(dp[i][j]\) 表示以元素 \(i\) 为结尾,长度为 \(k\) 的方案数。

那么显而易见就有一个转移方程:

\[dp[i][j]=\sum_{a[k]<a[i] ,\ k<i} dp[k][j-1] \]

先抛去第二维度的 \(j\) ,这是可以做一个关于 \(a[i]\) 值的大小,数值是 \(dp\) 的树状数组的。

维护两个操作:单点修改,区间查询。

当然因为 \(a[i]\) 实在是太大了,所以离散化。

如果加上第二层维度那就建立 \(k\) 个树状数组就好了。

c
#include <bits/stdc++.h>
#define int long long

#define ls (u << 1)

#define rs (u << 1 | 1)

#define lson ls, l, mid

#define rson rs, mid + 1, r

#define mid ((l + r) >> 1)

const int inf = 1e18;
const int N = 1e4 + 10;
const int mod = 123456789;
using namespace std;
int n, m;
struct ta {
    int tree[N];
    inline int lowbit(int x) { return x & -x; }
    inline void update(int x, int k) {
        while (x <= N) (tree[x] += k) %= mod, x += lowbit(x);
    }
    inline int query(int x) {
        int res = 0;
        while (x) (res += tree[x]) %= mod, x -= lowbit(x);
        return res;
    }
} t[105];
int tmp, val[N], b[N];
signed main() {
    while (~scanf("%lld%lld", &n, &m)) {
        for (int i = 1; i <= m; ++i) memset(t[i].tree, 0, sizeof t[i].tree);
        memset(val, 0, sizeof val), memset(b, 0, sizeof b);
        tmp = 0;
        for (int i = 1; i <= n; ++i) scanf("%lld", &val[i]), b[i] = val[i];
        stable_sort(b + 1, b + n + 1);
        int len = unique(b + 1, b + n + 1) - b - 1;
        for (int i = 1; i <= n; ++i) val[i] = lower_bound(b + 1, b + len + 1, val[i]) - b;
        for (int i = 1; i <= n; ++i) {
            t[1].update(val[i], 1);
            for (int j = 1; j < m; ++j) {
                tmp = t[j].query(val[i] - 1);
                if (!tmp)
                    break;
                t[j + 1].update(val[i], tmp);
            }
        }
        printf("%lld\n", t[m].query(n) % mod);
    }
    return 0;
}

标签:const,第二课,int,long,2024,数据结构,dp,define
From: https://www.cnblogs.com/QxBlogs/p/18054177/dp2

相关文章

  • 2024.3.5 esp8266开发学习_arduino常用函数
    2024.3.5esp8266开发学习_arduino常用函数pinMode函数引脚模式选择,模式有INPUT(输入),OUTPUT(输出),INPUT_PULLUP(上拉输入,自动拉高电平)//GPIOFUNCTIONS#defineINPUT      0x00//输入#defineINPUT_PULLUP   0x02//上拉输入#defineINPUT_PULLDOWN_16......
  • 联合省选2024游记
    day-???THUWC和NOIWC都结束了,一个2=一个Cu,太失败了。面基了HE的其他几个oier,大家都好厉害。回家摆烂,跟上了NFLS的模拟赛,天天被吊打/jk在省选前三周下载米哈游最新力作崩坏星穹铁道然后愤怒开玩,两周过完了主线返校了。day-2教练问高一选手有没有想去体验一下省选的,竟然还可......
  • 2024GDOI邮寄
    省流:菜渣了Day0上午腐败中午在车上腐败下午试机,打了lct+sam,感觉状态不错(flag)晚上腐败Day1看题,然后发现T1就是愁长的柿子,T2不太会,T3题意似乎很像模拟赛原题然后划了一下,T1还是不太会,但性质感觉全会了,T3跟模拟赛原题无任何关系然后继续想无果,赶紧写性质和暴力,写的很慢写完......
  • 题解 P10220【[省选联考 2024] 迷宫守卫】
    \(\text{Link}\)葬送了我2024省选的一题。题意有一颗深度为\(n+1\)的完全二叉树,其叶子上依次标有一个长为\(2^n\)排列\(a\),非叶结点有选择代价\(b_i\)。Alice、Bob两人进行游戏。Alice可以选择一些选择代价和不超过\(m\)的非叶结点,此后Bob会从根开始深度优先搜索......
  • 【2024-02-28】难也要改
    20:00你好,我脸上的阳光。你好,早晨的创造者,你将它铺展在田野,洒在郁金香和牵牛花低垂的脸上,也将它洒进那悲哀和想入非非的窗口。最好的传教士,可爱的星星,正是你在宇宙中的存在,使我们远离永恒的黑暗,用温暖的抚爱安慰我们,用光之手拥抱我们早上好,早上好,早上好。看,现在,我将开始新的一-......
  • 2024年,提升Windows开发和使用体验实践 - 终端&命令行篇
    前言经过前面的铺垫,终于继续更新了,这个大概率是本系列近期的最后一篇了。同时之前有些内容更新,我也补充到这一篇里面。关于scoop管理器的补充scoop常用命令scoophelp#查看帮助scoophelp<某个命令>#具体查看某个命令的帮助scoopinfo<app>#查看APP信......
  • P5609 [Ynoi2013] 对数据结构的爱
    题面传送门好像搞了个神秘做法。考虑离线扫描线,用一个fhq-Treap维护所有的询问现在长什么样,然后每次操作就整体加\(A_i\),\(\geqp\)的减去\(p\),这个可以分裂之后打整体标记,然后用那个值域相交的fhq-Treap合并实现。然后你发现这样就过了。构造一下卡不掉,于是考虑给这个......
  • [数据结构] 树、森林及二叉树的应用
    树、森林树的存储结构双亲表示法双亲表示法的存储结构#defineMAX_TREE_SIZE100typedefstruct{intdata;intparent;}PTNode;typedefstruct{PTNodenodes[MAX_TREE_SIZE];intn;}PTree;【注】区别树的顺序存储结构与二叉树的顺序存储结......
  • HEOI 2024 游记
    记性有点不好……发生的事情都基本忘了(大家记得用-std=c++14编译,GNUC++14和ISOC++14有些地方不太一样(特别是涉及abs(__int128)的情形)。不过我的缺省源里是有-std=c++14的,幽默。希望下次能在D1T1得分(怎么又是群论又是序数论的。向六省联考靠拢?其实如果1分不......
  • 2024-selenium-问题一:java.io.IOException: Invalid Status code=403 text=Forbidden
    问题截图:  问题分析: 参考网址:https://blog.csdn.net/weixin_46739493/article/details/134163739问题解决:1、chrome版本为:版本114.0.5735.199(正式版本);driver的版本为:114.0.5735.90; java-seleium版本为:4.0.0-rc-21<dependency>2<groupId>org.......