hdu1331Function Run Fun
我一开始是打算通过看数据,查找规律的,但是觉得这样很麻烦,即使看出来,那也没有掌握到其中的思想,加之没有思路,所以我干脆看了人家的答案
人家的题解
其实本题函数递归都给我们了。
但是就是说,要用一般简单的函数的话,就会超时(我试过。)
然后我参考了别人博客构造一个三维数组"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<b&&b<c)return f[a][b][c]=w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c); else return f[a][b][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); } int main(){ int a,b,c; while(cin>>a>>b>>c){ memset(f,0,sizeof(f)); if(a==-1&&b==-1&&c==-1)break; cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<w(a,b,c)<<endl; } }