POJ 1579 Function Run Fun
2016-08-09 10:51
169 查看
题目大意:这道题要求题目上给的很明确也就没有什么多说的了。
解题思路:这道题是一道dp入门题,要用的记忆化搜索来做,不然很容易超时的。把计算出来的值记录上来,免得后面算过的值继续再算,这样超时是必然的。当然可以用递归来做,只是有个地方要优化下。
#include <iostream> #include <cstdio> #include <cstring> #include <cstdlib> #include <algorithm> #include <map> #include <cmath> #include <queue> using namespace std; int dp[20][20][20]; int dps(int a,int b,int c) { if(a<=0||b<=0||c<=0) return 1; if(a>20||b>20||c>20) return dps(20,20,20); if(dp[a][b][c]!=0)//若dp数组当前值不为0 说明存在值 直接返回即可 这个不写上必然会超时的 return dp[a][b][c]; if(a<b&&b<c) dp[a][b][c]=dps(a,b,c-1)+dps(a,b-1,c-1)-dps(a,b-1,c); else dp[a][b][c]=dps(a-1,b,c)+dps(a-1,b-1,c)+dps(a-1,b,c-1)-dps(a-1,b-1,c-1); return dp[a][b][c]; } int main() { int a,b,c; while(~scanf("%d %d %d",&a,&b,&c)) { memset(dp,0,sizeof(dp));//初始化dp数组 if(a==-1&&b==-1&&c==-1) break; printf("w(%d, %d, %d) = %d\n",a,b,c,dps(a,b,c)); } return 0; }
END!!!!!!!!!!!!!!!!!!!
相关文章推荐
- poj 1579 Function Run Fun
- poj 1579 Function Run Fun
- poj 1579 Function Run Fun
- POJ 1579 Function Run Fun
- poj 1579 Function Run Fun
- POJ1579 Function Run Fun
- poj 1579 Function Run Fun
- POJ-1579 Function Run Fun
- POJ 1579 Function Run Fun
- poj1579 Function Run Fun
- Function Run Fun poj1579
- POJ 1579 Function Run Fun
- POJ 1579 Function Run Fun
- POJ-1579 Function Run Fun
- poj 1579 function run fun
- poj 1579 Function Run Fun
- POJ1579:Function Run Fun
- POJ 1579 Function Run Fun
- Function Run Fun--POJ 1579
- POJ1579——Function Run Fun(记忆化递归)