递推
CCCCDEV_CCCC
志在四方少年,羡慕南飞的雁
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
1096 双塔问题
至于为什那么是n-2这就有点类似于步数问题,而不是n-3或者更多,因为这就有点类似于递推的边界,比如我们经常弄出f[1]=1or0,这就相当于为什么要设f[1]而是别的。首先,这个题,是一个递推,递归,因为移动的方式都是和前一项后一项有关系,所以我们需要找出这个关系。大意就是用最少的次数,把那三个圆柱给移到指定的C柱上,然后把次数输出(要最少的)因为第3步的步数=第一步的步数且第2步需用2步。我不明白的是,这个题和高精有啥关系。第2步将2个最大的圆盘移到C柱上。所以,总步数=第1步的步数*2+2。...原创 2022-07-24 10:28:29 · 305 阅读 · 0 评论 -
1191矩形
1191 矩阵这个题,用手进行模拟一下,都会明白,他就是一个递推,暴力太…首先我们设状态f[i][j]表示从(1,1)到(m,n)的白色矩阵数量设方程f[i][j]=f[i-1][j]+f[i][j-1]+f[i-1][j-1]但是这个方程的状态很好想也很好理解,但是如何进行转移?如何进行...原创 2021-07-31 16:50:40 · 93 阅读 · 0 评论 -
1137 旅行计划
1137 旅行计划很明显的暗示,这一个拓扑排序,再加上一个动态规划,这和一开始入门的动态规划很相似,比较水,太水了,就是要进利用拓扑排序将图划分然后利用阶段i=j+1就可以求出来了,连递推的,没啥意义#include<iostream>#include<cstdio>#include<algorithm>#include<string>#include<queue>using namespace std;const int SIZE原创 2021-07-22 12:49:43 · 162 阅读 · 0 评论 -
0666 放苹果
0666 放苹果和汉诺塔很像,汉诺塔也算是递推里面的经典了写出状态后,一定要大胆假设设状态f[m][n]表示m个苹果放在n个盘子的方法分类讨论三种情况:1.只有一个苹果或者一个盘子或者没有盘子的情况,只有一种情况12.判断苹果的个数是否小于盘子个数如果少的话,那么就有n-m空的,所以m个苹果放m个盘子里面 apple(m,m)3.最起码每个盘子有一个,然后加上一个盘子为空的情况apple(m,n)= apple(m-n,n)+apple(m,n-1)#include<iostream&原创 2021-07-21 18:40:34 · 114 阅读 · 0 评论 -
1197 山区建小学
1197 山区建小学读题20分钟,想题10分钟,看代码20分钟,理解代码20分钟,写代码10分钟,调代码40分钟…(逃个人感觉是练的递推里面比较复杂的,应该是一道绿题吧,光递推式就很难找设状态a表示两地距离,c表示两地到学校最近距离,f表示从i个村庄建立j个学校的最短距离首先我们要根据两两之间的距离来构造各个点的距离然后通过中间点距离最短计算两个点到学习的最近距离和,也即是c数组然后就是求f数组,用一个n3循环枚举f数组,递推式f[i][j]=min(f[i][j],f[k][j-1]+c[k原创 2021-07-21 16:43:20 · 312 阅读 · 0 评论 -
1196 踩方块
踩方块这道题算是递推题里面简单的了很水,需要自己手推递推式,列出来多个结果然后找规律,找出来规律就很好的带出来了#include<iostream>#include<cstdio>using namespace std;int n;int main(){ cin>>n; int f[50]; f[1]=3,f[2]=7; for(int i=3;i<=n;i++) { f[i]=f[i-1]*2+f[i-2]; } cout<原创 2021-07-21 11:42:29 · 388 阅读 · 0 评论 -
1195 判断整除
1195 判断整除这一道题容易让人蒙,做了很长时间都不太理解也许就在一瞬间开窍设状态f[i][j]表示前i个数的和被k整除的余数是否为j也就是布尔数组方程为f[i][j] = f[i-1][(j-a[i]%k+k)%k] || f[i-1][(j+a[i]%k+k)%k]也就是对于两个数,需要判断**(a+b)%k或者(a-b)%k**的结果是否为j设(a+b)%k=j a%k+b%k=j a%k=j-b%k 然后为了防止负数j-b%k=j-b%k+k)%k这个方程是对于两个数来的,原创 2021-07-21 11:16:26 · 262 阅读 · 0 评论 -
1194 移动路线
1194 移动路线嗯…题很水,不过需要注意一些小细节,我在打循环的时候把j++打成了m++,所以就卡了很长时间然后其实这道题看第一眼就知道和过河卒很相似,递推式都是一样的,思路也完全一样,只不过不需要计算马的八步注意数组的从0从1开始,nm减一不减一,这个也很重要,所以通常情况从1开始,这也是一个卡的bug#include<iostream>#include<cstdio>using namespace std;int n,m;long long f[100][10原创 2021-07-21 09:23:32 · 3960 阅读 · 0 评论 -
1190上台阶
1190上台阶卡了6次…注意认真推导递推式f[i]=f[i-1]+f[i-2]+f[i-3]我还是用的平常的做法,三个循环,输入计算输出,然后开两个一位数组,但是可想而知,这种做法多一个循环多一个数组,在时间空间上面都不优秀,所以需要进行优化进行计算的递推数组f没办法优化,但是输入的n可以省去,同时也会省去一个循环,先计算,然后循环输入在线输出#include<iostream>#include<cstdio>using namespace std;int n;lo原创 2021-07-21 08:38:47 · 199 阅读 · 0 评论 -
1189 pell数列
1189 pell数列这道题和昨天做的差不多,不过就是递推式变了一下,注意递推还是不要用函数,用循环加数组类似于记忆化来实现,就说这些,个人感觉很水,10分钟就切了(逃#include<iostream>#include<cstdio>using namespace std;const int mod=32767;const int size=1000000;int n;int k[size],a[size];int main(){ cin>>n;原创 2021-07-21 08:04:07 · 214 阅读 · 0 评论 -
1188 斐波那契数列(2)
1188 斐波那契数列(2)首先说明一下几个很重要的地方就是一个裸裸的斐波那契,但是有很多个bug对于函数的递推和数组加循环的递推,首先都会想到函数递推,但还是这种做法会重复的验算很多次,做了很多没有用的运算,这是导致超时的原因,所以可以用循环求取每一个f数组,这样最后离线输出即可,不过就是空间换时间还有就是对于定义MOD SIZE这些常量的时候,需要注意,这些东西通常不能用来操作,或者说不能使用define来定义,被坑了,真的坑爆了…#include<cstdio>#include原创 2021-07-20 20:30:41 · 1224 阅读 · 0 评论 -
1313 位数问题
1313 位数问题真好,这道题用了我一个小时的时间把它切了这还是一个递推题,cfc同学告诉我这是一道数论题,所以他是一个傻子首先说一下,这道题的递推氏是真的很难推,首先设方程f[i][1]代表奇数个三的答案,f[i][0]代表偶数个三的答案其实这道题的和组合数学有点小小的联系,需要自己用手算,不然真的会蒙首先我们需要计算边界,也就是1的奇数偶数个方案f[1][0]=9,f[1][1]=1然后需要明白一个道理,前一位有奇数个3,那么这一位就不能取3前一位有偶数个3,那么这一位就得取3#incl原创 2021-07-20 18:39:36 · 337 阅读 · 0 评论 -
1312 昆虫问题
昆虫问题按着递推招进来的题…是一道练递推的经典题目原本以为用一个数组就可以解决,无非就是套用兔子生兔子的斐波那契公式,但是因为有 “ 两个月才能长成成虫的限制 ” 所以还需要一个辅助作用设两个数组,a和b,a表示成虫,b表示幼虫所以递推氏子就很好推了:b[i]=y*a[i-1] a[i]=a[i-1]+b[i-2],这个月的幼虫等于每月产卵乘以已过的天数,这个月的成虫等于上个月的成虫加上前两个月的幼虫(因为两个月成长)#include<iostream>#include<cs原创 2021-07-20 16:27:33 · 238 阅读 · 0 评论
分享