递归递推练习 C

来源:互联网 发布:悉尼大学回国就业 知乎 编辑:程序博客网 时间:2024/05/03 03:53

代码:

#include<bits/stdc++.h>
using namespace std;
int x[31][31][31]={0};
int f(int a,int b,int c)
{
    if(a<=0||b<=0||c<=0)
        return 1;
    else
    if(a>20||b>20||c>20)
        return f(20,20,20);
    else
    if(x[a][b][c])
        return x[a][b][c];
    else
    if(a<b&&b<c)
        return x[a][b][c]=f(a,b,c-1)+f(a,b-1,c-1)-f(a,b-1,c-1);
    else
        return x[a][b][c]=f(a-1,b,c)+f(a-1,b-1,c)+f(a-1,b,c-1)-f(a-1,b-1,c-1);

}
int main()
{
    int a,b,c;
    while(cin>>a>>b>>c)
        cout<<f(a,b,c)<<endl;
    return 0;
}

分析:

根据题目要求敲即刻,但是需要注意要用深度记忆搜索,这样所有计算过的数据都可以保存,防止多次运算同一组数据;

注意:

运用深度记忆搜索;

0 0
原创粉丝点击