完了,忍不住想说四维与理解多DP的关系
2026-05-17 17:35:07
发布于:四川
这里不做过多介绍,直接引入
三维介绍
其实都知道,三维是有x、y、z三个量,其中肯定有人想着“x,y是二维也就是平面直角坐标系的两个量,所以三维只是将平面加了一个z而已”注意,这段说辞的意思一般来说就是一个水平平面多增了一个高叫“z”,但是这是错的!在讲平面直角坐标系前,我们对于长方形、正方形,准确来说叫矩形的几何图形计算面积时会说“长乘宽等于其面积”但在往其他地方走一下可知:三角形叫高,是不是因为其所谓的宽(长)没有在这几何图形上,从而换了说法?
三角形的那个没有在自己身上却进入计算的那一条边叫“高”(直角三角形除外,其高可以算作在一条直角边上),平行四边形也叫“高”(特殊的,长方形的高可以算作在一条边上),甚至是梯形也叫“高”(依旧有特殊) 那...矩形能叫“高”吗?其实从我们接触矩形的时候就不叫“长”与“宽”了,叫“底”与“高”,所以并不是换了说法,而是为了我们自身的理解叫成了“长”与“宽”。当我们开始接触三维,也就是立体几何图形时,方便后续理解,改回正确叫法:“底”“高”。
了解完这些,你应该会知道为何“x,y是二维也就是平面直角坐标系的两个量,所以三维只是将平面加了一个z而已”这段话是错的了吧,知道就看下一自然段,不知道继续看:“z”是我们常说的高,但在三维运用中,“z”只是二维上的高,“x”是二维上的底,那不用多说,“y”是啥?(以免还有人不知道,“y”是二维在不考虑平面直角坐标系中不存在的,也就是三维上的高)
跟我一样玩MC的小伙伴,在按下键盘上F3时,可以看见所处坐标,当你在不跳跃,只按下“w a s d”时,就会发现“x”与“z”坐标变化了,但“y”坐标始终没有变化(开自动跳跃的可以再去过一次清明节了),现在知道为什么了吧。
重头戏 四维
有过这方面知识储备的小盆友应该会知道,四维包含三个空间维度与一个时间维度,三个空间维度就是上文的“x z y”,既已理解四维,看下一自然段,不知的继续看:想象一个房间,这个房间里有一个盒子,过了一个单位的时间后,盒子变成了糖果,又过了一个单位的时间后,有一个不愿意透露姓名的小盆友一个瞬移进来迅速吃掉了糖果,又瞬移出去了,房间里甚都没有。又过了一个单位的时间,房间里莫名多出一个卡片。好,故事结束,当我们把这个房间里的状态以一个数组(列表)a以1开始来存储,那便是:a[1]=“盒子”,a[2]=“糖果”,a[3]=“NULL”(代表空),a[4]=“卡”。这就是时间维度的存贮,一个单个单个的个体组成的一维时间维度,相当于一个0维的空间维度(一个点)被一个当把每个时间单位状态都记录下来的数组(列表)存了起来。若这个房间不再是一个一个的存,像第一个时间单位,不再只有一个盒子,而同时拥有一个盒子,一个袋子,设存储盒子这个位子的单独变化(盒子->糖->NULL->卡片)的数组(列表)为a1,若是袋子这个位子也在单独变化,则有一个a2数组(列表)来存储这个位子的变化,这就是两个时间线的变化量存储,但这里两个数组(列表)所表述的的都是这个房间里的变化,并且所记录位子也不重复,所以这里理应合并为一个数组(列表),一个2 * 4二维的数组(列表),但是表述的是一个时间维度与记录每个时间的两个位子状态的维度,而非“x”与“z”的维度。此时我们再延伸,这些位子有固定摆放顺序,不在只有两个位子,而是有四个位子摆成了2*2的样子,且每个位子与上述描述相同,那么这个a数组便改为三维数组(列表),同样是一个时间维度与一个“x”还有一个“z”组成的3维,而非“x”“z”“y”。最后,4个位子变成了8个,摆成了2 * 2 * 2的立体位子,且位子记录描述上同,就会是一个时间维度,与一个“x”和“z”还有一个“y”。再...我们第一次说的记录为a[时间],则第二次为a[时间][x],第三次a[时间][x][z],第四次便是a[时间][x][z][y]。这就是我们的四维数组(列表)。恭喜你理解啦!(没理解?重看这一自然段“:(”
)
别说了,ACgo网站是个编程网站,且c++用户居多(据我了解),所以四维空间该如何在代码中运用呢?
#include <bits/stdc++.h>
using namespace std;
int main(){
int a[10];
int b[10][10];
int c[10][10][10];
int d[10][10][10][20];
return 0;
}
仔细看这四个数组(此乃c++数组,学P的理解成列表)
第一个相当于将一个 一个 的点变成一个 十个 的点,且这十个点连续;
第二个在第一个基础上,将每个 一个 的点变成每个 十个 的点,且这 每个 十个点连续;
第三个再在第二个基础上,将每个 一个 的点变成每个 十个 的点,且这 每个 十个点连续;
第四个同理。
简的来说第四个就是一个10 * 10 * 10的点阵,变成10 * 10 * 10的 长度为20的数组 阵
用处呢?
在记忆化搜索中兴许有用
主要还是在DP(动态规划)上作每个状态量的记录。
======================
======================
======================
草草结束
希望这篇来自我自己的投稿能帮助到你理解四维空间转三维的原理来推论自己多维DP的代码原理以防报错后急着找不到从何下手
最后说一个东西,由于内容价值太小,就不单独发讨论了
在m=2时
cout<<n%m;
与
if(n%m){
cout<<1;
}else{
cout<<0;
}
其实是不等价的(不考虑时间复杂度,只考虑代码运行后的效果)
感谢您抽出时间观看完此文,若有错误,欢迎您在评论区留言,我会抽空回复的,谢谢

全部评论 22
热知识:我们的脑子是三维的
昨天 来自 江苏
6四维是用来解决P4035 [JSOI2008] 球形空间产生器的
17小时前 来自 云南
4神作
16小时前 来自 广东
2神在哪
10小时前 来自 广东
0不知道
10小时前 来自 新加坡
0
6
15小时前 来自 浙江
3我是三体人,这是二巷勃
14小时前 来自 重庆
2你是高明的四维生物,你什么都懂,但是我忠诚的劝告你不要被五维生物抹除
17小时前 来自 北京
1跟我的主题有关吗?我在强调我这么想可以做什么,不是讨论四维究竟是什么
15小时前 来自 四川
0你什么事情都坚持自己的主见,而且你已经说了你强调你想做什么做什么,那我不赞赏你干什么
14小时前 来自 北京
0
666
18小时前 来自 浙江
1欢迎注册 ZDZL OJ:https://oj.zdzltop.com 如无邮箱,可以私信我,我可以提供注册页面。无需邮箱,直接自行设置信息后自动注册。
昨天 来自 湖北
1?
17小时前 来自 四川
0广告,ZDZL的
10小时前 来自 北京
0
别吵了,状压牛逼
10小时前 来自 广东
0dp 了怎么还没有 充电器和看到他。
11小时前 来自 新加坡
0再聊我ID的,搭四!!

11小时前 来自 四川
0555
14小时前 来自 浙江
06
14小时前 来自 山西
06
14小时前 来自 山西
06
14小时前 来自 山西
06
14小时前 来自 山西
06
14小时前 来自 山西
011111
14小时前 来自 浙江
0666
15小时前 来自 浙江
0啪啪啪
昨天 来自 浙江
0四维不一定是时间维度
昨天 来自 北京
0孩子,你真的懂吗?
昨天 来自 四川
1孩子,你真的懂吗?
昨天 来自 北京
06
昨天 来自 浙江
0



























































有帮助,赞一个