码迷,mamicode.com
首页 > 其他好文 > 详细

Function(Function(F...

时间:2016-08-27 23:22:55      阅读:228      评论:0      收藏:0      [点我收藏+]

标签:

【题目描述】:

对于一个递归函数w(a,b,c)

如果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)

 

这是个简单的递归函数,但实现起来可能会有些问题。当a,b,c均为15时,调用的次数将非常的多。你要想个办法才行。

 

【输入描述】:

会有若干行.

并以-1,-1,-1结束.

 

【输出描述】:

输出若干行

 

【样例输入】

【样例输出】

1 1 1

2 2 2

-1 -1 -1

w(1, 1, 1) = 2

w(2, 2, 2) = 4

【数据范围及描述】:

 

 

代码太水啦!

技术分享
 1 #include <iostream>
 2 #include <cstring>
 3 #include <algorithm>
 4 #include <cstdio>
 5 using namespace std;
 6 
 7 typedef long long LL;
 8 
 9 const int maxn=30;
10 LL F[maxn][maxn][maxn];
11 
12 LL w(int a,int b,int c)
13 {
14     if(a<=0||b<=0||c<=0) return 1;
15     if(a>20||b>20||c>20) return w(20,20,20);
16     if(F[a][b][c]!=-1) return F[a][b][c];
17     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);
18     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);
19 }
20 
21 int main()
22 {
23     int a,b,c;
24     memset(F,-1,sizeof(F));
25     while(scanf("%d %d %d",&a,&b,&c)!=EOF)
26     {
27         if(a==-1&&b==-1&&c==-1) break;
28         printf("w(%d, %d, %d) = %lld\n",a,b,c,w(a,b,c));
29     }
30     return 0;
31 }
View Code

技术分享

Function(Function(F...

标签:

原文地址:http://www.cnblogs.com/cnblogsLSY/p/5813965.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!