(#define) (定义的对象)(定义的含义) #include <iostream>#include <string>#include <algorithm>#include <cmath>#define ll long longusing namespace std;lld[30][30][30]; int w(lla,llb,llc) { if (a <=0||b<=0||c <=0) { return1; } else if (a >20||b>20||c >20) { if (...
c > 20) return f[20][20][20] = dfs(20, 20, 20); else if(f[a][b][c] != INF) return f[a][b][c]; // 保证此时,a, b, c <= 20 else if (a < b && b < c) return f[a][b][c] = dfs(a, b, c-1) + dfs(a, b-1, c-1) - dfs(a, b-1, c); else ...
LL a, b, c; int w1[25][25][25]={0}; int w(LL a, LL b, LL c) { if (a<=0 || b<=0 || c<=0) return 1; if (a>20 || b>20 || c>20) return w(20, 20, 20); if (w1[a][b][c]!=0) return w1[a][b][c]; if (a<b && b<c) { w1[a][b][c] = ...
程序使用记忆化搜索优化递归调用,避免重复计算。样例输入输出展示了如何计算w(1,1,1)和w(2,2,2)。 Function 题目描述 对于一个递归函数w(a,b,c) 如果a≤0或b≤0或c≤0就返回值1。 如果a>20或b>20或c>20就返回w(20,20,20) 如果a<b并且b<c就返回w(a,b,c−1)+w(a,b−1,c−1)−w...
Function题解集合 记忆化搜索 记忆化搜索 还是把本题转化为对一棵多叉树的遍历,但是题目中也暗示我们会存在很多重复计算,那么现在关键就在于找到这些重复计算,并且想办法免去这些重复计算,下面看图: 这里假设a=b=c=3 上图中相同形状用green圈出来的部分代表着是重复计算过程,可以通过哈希容器记录保存,避免重复计算 ...
如果a<=0 or b<=0 or c<=0就返回值1. 如果a>20 or b>20 or c>20就返回w(20,20,20) 如果a<b并且b<c 就返回w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c) 其它别的情况就返回w(a-1,b,c)+w(a-1,b-1,c)+w(a-1,b,c-1)-w(a-1,b-1,c-1) ...
P1464 Function - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 普普通通模拟题意:TLE 代码解读 #include<iostream>usingnamespacestd;inta,b,c;intw(inta,intb,intc){if(a<=0||b<=0||c<=0)return1;if(a>20||b>20||c>20)returnw(20,20,20);if(a<b&&b<c)returnw(a,b,c-1)+w(a,b...
题解P1464 【Function】 - Vel_ 的博客 - 洛谷博客www.luogu.com.cn/blog/vel/solution-p1464 #define MEM(x, y, z) (mem[x][y][z] ? mem[x][y][z] : mem[x][y][z] = w(x,y,z)) 上面是宏定义,通过条件表达式判断是否在备忘录里。mem的每一个元素需要初始化为0. ...
洛谷OJ-P1464 Function 题目描述 题目描述 解析:这题属于递归问题,如果直接递归求值会导致超时问题,需要用记忆化搜索的方法,用空间换取时间。 记忆化搜索在求解的时候还是按着自顶向下的顺序,但是每求解一个状态,就将它的解保存下来,(用数组存储) 以后再次遇到这个状态的时候,就不必重新求解了。
题面的最后明白着写了记忆化搜索,那么我们就来使用这一优化方法。把每次w获取到的值记录下来,如果以后用到,直接调用即可,开一个三维数组存储即可,其中三维数组的三个下标分别为a,b,c。 记得开long long。一天扣码一场空,不开long long见祖宗。 代码 ...