您的位置:首页 > 其它

HDU 1331--DP--(递归保存中间结果)

2015-05-31 12:18 211 查看
题意:题目给出了递归计算式,让你编程用这个计算式求出结果。

分析:递归会超时,用DP保留中间结果。DP不光是只有状态转移方程还可以用于递归保存中间结果以节约时间。

代码:

#include<iostream>
#include<algorithm>
using namespace std;
int dp[100][100][100];
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];
else 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];
else 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) break;
memset(dp,sizeof(dp),0);
cout<<"w("<<a<<", "<<b<<", "<<c<<") = "<<DP(a,b,c)<<endl;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: