poj 1579 Function Run Fun


其实本题函数递归都给我们了。

但是就是说,要用一般简单的函数的话,就会超时(我试过。)

然后我参考了别人博客构造一个三维数组"int d[a][b][c]",用来记忆。

真的用到的是后面

“  if(d[a][b][c])  return d[a][b][c];”

只要曾经算过得就可以记下了。减少了计算时间了!

View Code
#include <iostream>
#include<cstdio>
using namespace std;
int d[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(d[a][b][c])  return d[a][b][c];
    if(a<b&&b<c) 
        return  d[a][b][c]=w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c);
    else
    {
        return    d[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 argc, char *argv[])
{
    int a,b,c;
    while(cin>>a>>b>>c)
    {
     if(a==-1&&b==-1&&c==-1) break;
     else      printf("w(%d, %d, %d) = %d\n", a, b, c, w(a, b, c));

    }
    return 0;
}

 

基本上属于本人原创,但是参考了别人的代码。谢谢

posted @ 2013-04-11 20:27  90后程序媛  阅读(269)  评论(0编辑  收藏  举报