欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

Function(洛谷-P1464)

发布时间:2025/3/17 编程问答 17 豆豆
生活随笔 收集整理的这篇文章主要介绍了 Function(洛谷-P1464) 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

题目描述

对于一个递归函数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结束,保证输入的数在-9223372036854775808~9223372036854775807之间,并且是整数

输出格式:

输出若干行

格式:[b]w(a,_b,_c)_=_你的输出(_代表空格)[/b]

输入输出样例

输入样例#1: 

1 1 1 2 2 2 -1 -1 -1

输出样例#1: 

w(1, 1, 1) = 2 w(2, 2, 2) = 4

源代码  

#include<iostream> using namespace std; long int w(long int a,long int b,long int c); long int result[30][30][30]={0};int main() {long int num[100][3];long int a,b,c;int i;for(i=0;;i++){cin>>num[i][0]>>num[i][1]>>num[i][2];//输入函数if( num[i][0]==-1 && num[i][1]==-1 && num[i][2]==-1 )break;}for(i=0;;i++){a=num[i][0]; b=num[i][1]; c=num[i][2];if(a>20) a=21;//大于20时,返回20if(b>20) b=21;//大于20时,返回20if(c>20) c=21;//大于20时,返回20if( a==-1 && b==-1 && c==-1 )//均为-1时break;//终止循环else//按要求输出cout<<"w("<<num[i][0]<<", "<<num[i][1]<<", "<<num[i][2]<<") = "<<w(a,b,c)<<endl;}return 0; }long int w(long int a,long int b,long int c) {if( a<=0 || b<=0 || c<=0 )//小于0时return 1;//返回1else if(result[a][b][c]!=0)//不等于0时return result[a][b][c];//返回当前值else if( a>20 || b>20 || c>20 )//任意一参数大于20时return w(20,20,20);//返回20else if( a<b && b<c )//a<b并且b<c时{result[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c);return result[a][b][c];}else//其他情况{result[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);return result[a][b][c];} }

总结

以上是生活随笔为你收集整理的Function(洛谷-P1464)的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。