1910 递归函数(递归小练)
1910 递归函数
时间限制: 1 s
空间限制: 128000 KB
题目等级 : 黄金 Gold
题目描述 Description
对于一个递归函数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)
这是个简单的递归函数,但实现起来可能会有些问题。
输入描述 Input Description
会有若干行.每行三个数,表示a, b, c。并以−1, −1, −1结束
输出描述 Output Description
输出若干行,注意各种中的空格。
样例输入 Sample Input
1 1 1
2 2 2
-1 -1 -1
样例输出 Sample Output
w(1, 1, 1) = 2
w(2, 2, 2) = 4
数据范围及提示 Data Size & Hint
a, b, c < 30, Task < 11
分类标签 Tags 点此展开
宝不开森!( ˇˍˇ )这么一个简单的递归+模拟,宝竟然因为函数内变量错误,wa了6
遍~~o(>_<)o ~~,简直不可原谅!!
不多说了,思路见题解!!
上菜!!!!!!╮(╯▽╰)╭
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int a,b,c,dp[101][101][101],ans; int w(int aa,int bb,int cc) { if(aa<=0||bb<=0||cc<=0) return 1; if(dp[aa][bb][cc]!=999999999) return dp[aa][bb][cc]; else if(aa>20||bb>20||cc>20) ans=w(20,20,20); else if(aa<bb&&bb<cc) ans=w(aa,bb,cc-1)+w(aa,bb-1,cc-1)-w(aa,bb-1,cc); else ans=w(aa-1,bb,cc)+w(aa-1,bb-1,cc)+w(aa-1,bb,cc-1)-w(aa-1,bb-1,cc-1); return dp[aa][bb][cc]=ans; } int main() { for(int i=1;i<=100;i++) for(int j=1;j<=100;j++) for(int k=1;k<=100;k++) dp[i][j][k]=999999999; while(cin>>a>>b>>c&&a!=-1&&b!=-1&&c!=-1){ cout<<"w"<<"("<<a<<", "<<b<<", "<<c<<")"<<" "<<"="<<" "<<w(a,b,c)<<endl; ans=0; } return 0; }
如果对你有所帮助,别忘了加好评哦;么么哒!!下次见!88
细雨斜风作晓寒。淡烟疏柳媚晴滩。入淮清洛渐漫漫。
雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。

浙公网安备 33010602011771号