任务说明:递推,层层递进,由基础推向顶层.二分不仅可以用来查找数据,还可以确定最合适的值. P1192 台阶问题 有N级的台阶,你一开始在底部,每次可以向上迈最多K级台阶(最少1级),问到达第N级台阶有多少种不同方式. 输入文件的仅包含两个正整数N,K. 输入文件stair.out仅包括1个正整数,为不同方式数,由于答案可能很大,你需要输出mod 100003后的结果. 解答: 我自己写的时间复杂度是O(N^2), 空间复杂度是O(K);看了题解还有用前缀和方法O(N)的...真厉害 提交了一次…
任务说明:这里的搜索不仅包含了dfs和bfs,还包括剪枝.记录等技巧以加快速度. [USACO06FEB]数字三角形Backward Digit Su… 滑雪 吃奶酪 靶形数独 P1118 [USACO06FEB]数字三角形Backward Digit Su… 有这么一个游戏:写出一个1-N的排列a[i],然后每次将相邻两个数相加,构成新的序列,再对新序列进行这样的操作,显然每次构成的序列都比上一次的序列长度少1,直到只剩下一个数字位置. 最后得到16这样一个数字. 现在想要倒着玩这样一个游戏,…
Luogu T7152 细胞(递推,矩阵乘法,快速幂) Description 小 X 在上完生物课后对细胞的分裂产生了浓厚的兴趣.于是他决定做实验并 观察细胞分裂的规律. 他选取了一种特别的细胞,每天每个该细胞可以分裂出 x − 1 个新的细胞. 小 X 决定第 i 天向培养皿中加入 i 个细胞(在实验开始前培养皿中无细胞). 现在他想知道第 n 天培养皿中总共会有多少个细胞. 由于细胞总数可能很多,你只要告诉他总数对 w 取模的值即可. Input 第一行三个正整数 n, x,w Outpu…
同步发表于我的洛谷博客. NOIP2013提高问题求解2: 现有一只青蛙,初始时在n号荷叶上.当它某一时刻在k号荷叶上时,下一时刻将等概率地随机跳到1,2,--,k号荷叶之一上,直到跳到第1号荷叶为止.当n=2时,平均一共跳2次,n=3时,平均一共跳2.5次.当n等于5时,平均一共跳几次. 先将问题转为青蛙随机跳了一步以后的情况,分为5种情况,分别是落在1号.2号.3号.4号.5号荷叶上.每种情况发生的概率为1/5. 然后设f(n)为n片荷叶所需的平均次数.显然,f(1)=1. 先从简单的考虑:…
一.递推: 所谓递推,简单理解就是推导数列的通项公式.先举一个简单的例子(另一个NOI练习题,但不是这次要解的问题): 楼梯有n(100 > n > 0)阶台阶,上楼时可以一步上1阶,也可以一步上2阶,也可以一步上3阶,编程计算共有多少种不同的走法. 这个问题可以用递归来进行解决,但是解题时间1秒明显不够用.怎么办呢,可以考虑找到“规律”,然后推导公式解决问题,开始画图分析: 这是4个台阶时的全部7种走法,记作f(4)=7.现在观察右侧绿色走过的部分,1234四种情况是3个台阶时的4种走,法记…
非常好的递推 公式啥的懒得写了,直接放链接哈哈哈https://www.luogu.org/problemnew/solution/P1291 #include<bits/stdc++.h> #define rep(i,x,y) for(register int i=x;i<=y;i++) #define dec(i,x,y) for(register int i=x;i>=y;i--) #define int long long #define In freopen("…
题目分析: 首先为了简便起见我们把前$15$的答案找出来,免得我们还要特判$200$以内之类的麻烦事. 然后我们从$16$开始递推.考虑猜测第i位是$0$还是$1$(这本质上是个二分).一开始先猜是$1$,然后求是$0$的有多少个,与当前的$k$判断确认$0$和$1$. 然后考虑到某种情况就不输出的情况,实际上就是末尾的这个$ans$正好合法. 然后递推的时候除了将两个串原本出现的加起来,还要考虑拼接的时候多出的.可以预处理也可以边$dp$边做. 不预处理的暴力做时间是$O(mn^3)$(过不了…
任务说明:这是最基础的动态规划.不过如果是第一次接触会有些难以理解.加油闯过这个坎. 01背包二维数组优化成滚动数组的时候有坑有坑有坑!!!必须要downto,downto,downto 情景和代码见装箱问题. P1060 开心的金明 小明的妈妈给小明N元钱,小明想买m件物品,每个物品价值为 价格*重要度,求出不超过N元钱的情况下,最多能买多少价值的物品,输出价值. 解法:直接的01背包问题,我居然还去看了书..递推方程一次写不出来.方程需要记忆. dp[i][j]表示前i件物品总价格不超过j元…
[例题]CH0301 递归实现指数型枚举 #include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <vector> using namespace std; int n; vector<int> chosen; void calc(int x) { ) { ; i<chosen.size(); ++i) prin…
任务说明:由一个根节点分叉,越分越多,就成了树.树可以表示数据之间的从属关系 P1087 FBI树 给一个01字符串,0对应B,1对应I,F对应既有0子节点又有1子节点的根节点,输出这棵树的后序遍历.字符串长度小于等于2^10. 心情好,写代码一次ac了 #include <iostream> #include <cstdio> #include <cstdlib> #include <stack> #include <map> #include…