otherwise it returns: w(a-1, b, c)+ w(a-1, b-1, c)+ w(a-1, b, c-1)
输入-1,-1,-1时终止程序
此题如果一直递归下去时间复杂度太大
需要打表储存已知数据
1.#include<bits/stdc++.h>
using namespace std;
int dp[22][22][22];//定义全局变量,初值为0;
int DP(int a,int b,int c)
{
if(a<=0||b<=0||c<=0) return 1;
else if(a>20||b>20||c>20) return DP(20,20,20);
else if(a<b&&b<c)
{
if(dp[a][b][c]) return dp[a][b][c];//如果数据已经有,直接取出不再递归
dp[a][b][c]=DP(a,b,c-1)+DP(a,b-1,c-1)-DP(a,b-1,c);//如果未出现此值继续递归
}
else
{
if(dp[a][b][c]) return dp[a][b][c];
dp[a][b][c]=DP(a-1,b,c)+DP(a-1,b-1,c)+DP(a-1,b,c-1)-DP(a-1,b-1,c-1);
}
return dp[a][b][c];
}
int main()
{int a,b,c;
while(cin>>a>>b>>c)
{if(a==-1&&b==-1&&c==-1)
return 0;
cout<<DP(a,b,c)<<endl;
}
return 0;
}