我一开始是打算通过看数据,查找规律的,但是觉得这样很麻烦,即使看出来,那也没有掌握到其中的思想,加之没有思路,所以我干脆看了人家的答案
人家的题解
其实本题函数递归都给我们了。
但是就是说,要用一般简单的函数的话,就会超时(我试过。)
然后我参考了别人博客构造一个三维数组"int d[a][b][c]",用来记忆。
真的用到的是后面
“ if(d[a][b][c]) return d[a][b][c];”
只要曾经算过得就可以记下了。减少了计算时间了!
#include "iostream"#include "string.h"using namespace std;int f[21][21][21];int w(int a,int b,int c){ if(a<=0||b<=0||c<=0)return 1; if(a>20||b>20||c>20)return w(20,20,20); if(f[a][b][c])return f[a][b][c]; if(a>a>>b>>c){ memset(f,0,sizeof(f)); if(a==-1&&b==-1&&c==-1)break; cout<<"w("< <<", "<<<", "< <<") = "< <