首页 > 其他分享 >寒假day3 2.4

寒假day3 2.4

时间:2024-02-04 09:58:16浏览次数:25  
标签:状态 le 复杂度 day3 sqrt 寒假 维度 dp 2.4

讲师:钟皓曦,NOI2012Au,from 成都七中

听课能听懂 30% 就算成功**

dp

关键:状态、转移、初始化

转移:状态与状态之间的关系

初始化:状态的边界条件

数字三角形

状态:\(f_{i,j}\) 表示走到 \(a_{i,j}\) 这个位置的最大价值。

如何设计状态?

题目要你干什么——从第一行走到最后一行

该过程中什么在变化——位置、价值

题目求什么——最大价值

一般情况下状态表示形式:\(f[\text{除题目所求外所有在变化的量}]=\text{题目所求}\)。

如果每次走还有能量的花费,怎么定义状态?

再加一维,表示能量(能量在变化)。

先不要管维度是不是太多,先扔进去

维度少了,是做不了题的;维度多了,可以慢慢删

数字三角形2 noip.ac 2106

设定基本类似,目标:使得经过的所有数之和 %100 之后最大。

考虑刚才的状态能不能做这道题。

显然不能。不满足最优子结构

反例:

  1
50  97
  1
2

dp 本质上类似贪心。

发现做不了——维度不够。

维度从哪找——变化的量。

先不要关注时空限制,保证答案正确。

变化的量——位置、%100 之后的价值

状态:\(f[i][j][k]\) 表示走到 \((i,j)\) 这个位置是否能达到 \(k\) 的价值。

斐波那契数列

求 \(f_n\% (10^9+7)\),\(n\le 100\)。

有几种暴力写法?

两种——用别人更新自己(递推),用自己更新别人

dp 时要根据题目选择用哪一种。

比如,\(f(i)=\max\limits_{l\le j\le r}f_j+a_i\),只能用别人更新自己。

除了数据结构优化 dp 的题,大部分两种写法都可以。

第三种写法——记搜,博弈论dp中常用

f[n]=dfs(n-1)+dfs(n-2)

复杂度 \(O(f(n))\)。

从组成表示来理解。

利用记忆化优化,用 \(g_i\) 表示是否已经求出 \(f_i\)。

复杂度 \(O(n)\)。

\(g_i\) 只会有一次 \(0\rightarrow 1\)。

前置知识结束

对 dp 分类——背包、区间、树形、数位、状压、插头、排列、博弈、一般

除了一般 dp 外,都有固定的状态设计和转移方程的写法。

最难的——数位 dp,没有套路。

ppt 108 P1 HDU5009

发现对一个位置修改多次没有意义,并且先染左边和先染右边没有区别。

于是定义从左到右进行染色。

顺序在 dp 上很重要。

\(f_i\) 表示 \(1\sim i\) 全都染完色的最小代价。

\(f_i=\min\limits_{1\le j<i}(f_j+diff(j+1,i)^2)\)。

时间复杂度 \(O(n^2)\)。

\(ans\le n\)(一个一个改)。

换句话说,选择的区间不能超过 \(\sqrt{n}\)。

即 \(diff(j+1,i)\le n\sqrt{n}\)。

枚举 \(\sqrt{n}\) 个位置。

发现决策单调性。

用 \(\sqrt{n}\) 个双指针维护这 \(\sqrt{n}\) 个位置。

时间复杂度 \(O(n\sqrt{n})\)。

标签:状态,le,复杂度,day3,sqrt,寒假,维度,dp,2.4
From: https://www.cnblogs.com/BYR-KKK/p/18005605

相关文章

  • 2.3寒假每日总结25
    nginx平滑升级1,当前版本查看[root@localhostsbin]#./nginx-V2,解压新版本安装包tar-zxvfnginx-1.20.2.tar.gz3,进入新版安装包文件cdnginx-1.20.2/4,初始化(若是添加新模块,可在后面追加模块名称)./configure--prefix=/usr/local/nginx--conf-path=/usr/local/......
  • 代码随想录 day39 不同路径 不同路径 II
    不同路径这题由于说明了只能向下和向右那么对于终点而言显然只能由[i][j-1]+[i-1][j]种路线这就是状态转移方程那么初始值要赋予的就是上边和左边都是一也就是直接从边边到达重点的这样就保证我们的状态转移方程有数值可以将计算不同路径II这题难解的点在于障......
  • 2024.2.3寒假每日总结25
    算法:1690.石子游戏VII-力扣(LeetCode)使用的HBuilderX版本:3.98Git插件已安装:项目结构如下:右击项目目录,在git命令中-》检查已修改,可以发现还是能检索到修改过的文件:文件是有修改过的,但是在上图中没有任何的修改标识,这些文件也没有添加......
  • 牛客寒假训练赛第一场
    基本状况赛时开了五题,B题大分讨卡住了,其他题目就看了题面。有几个基本状况:贪心题没有深入思考,就无脑二分入手,倒是大量罚时。分讨思路不清楚。E题很搞,名字叫贪心题但是纯爆搜,爽切。Ahttps://ac.nowcoder.com/acm/contest/67741/A虽然签到题,但是学习一下jly写法。我......
  • 寒假生活指导26
    #coding:utf8#指定源代码编码格式为UTF-8frompyspark.sqlimportSparkSession#导入SparkSession类,用于创建和管理Spark应用上下文frompyspark.sql.functionsimportconcat,expr,col#导入SparkSQL中的函数,这里并未使用但可能在后续操作中用于数据转换或计算f......
  • 寒假训练1/31
    寒假训练2024/1/31今天主要是补题。codeforce161E-IncreasingSubsequences题意:T组询问,每次给你一个X($[2,10^{18}]$),你需要构造一个长度不超过200,值域$∈[−109,109]$的序列使得其单调上升子序列个数恰为X(包含空子序列且不同位置的相同上升子序列算作不同的上升子序......
  • 2024牛客寒假算法基础集训营1
    题目链接A.因为判断要素较少,直接条件模拟#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintN=2e5+10;voidsolve(){intn;cin>>n;strings;cin>>s;intD=0,F=0,S=0,d=0,f=0,ss=0;for(inti=0;i<s.size();i++){......
  • 2024年2月笔记:Redis7.2.4版本在Mac电脑的Docker里安装Redis集群
    本文环境:Mac电脑,Brew和Docker都已安装好,Redis版本:7.2.4第1步,验证Docker和Brewdocker--version  //查看docker版本,此处忽略安装Docker步骤brew--version   //查看版本号第2步,创建Redis集群网络dockernetworkcreateredis-cluster-net   //创建一个名......
  • 寒假day2 2.3 ds
    讲师:杨宁远,NOI2022Au,rk20,from成都七中DSlistauto定义指针。*i访问元素。prev(i)next(i)访问前驱、后继的值。rbrgenrend含义相反。frontback放回头元素和尾元素。insert(iterator,value),会在迭代器前插入元素。erase(iterator),删除元素。a.swap(b):O(1)merge......
  • 2.2寒假每日总结24
    使用的HBuilderX版本:3.98Git插件已安装:项目结构如下:右击项目目录,在git命令中-》检查已修改,可以发现还是能检索到修改过的文件:文件是有修改过的,但是在上图中没有任何的修改标识,这些文件也没有添加到.gitignore配置中。二、问题解决......