poj 1579 function run fun
2013-08-14 21:47
375 查看
Function Run Fun
Description
We all love recursion! Don't we?
Consider a three-parameter recursive function w(a, b, c):
if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:
1
if a > 20 or b > 20 or c > 20, then w(a, b, c) returns:
w(20, 20, 20)
if a < b and b < c, then w(a, b, c) returns:
w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
otherwise it returns:
w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
This is an easy function to implement. The problem is, if implemented directly, for moderate values of a, b and c (for example, a = 15, b = 15, c = 15), the program takes hours to run because of the massive recursion.
Input
The input for your program will be a series of integer triples, one per line, until the end-of-file flag of -1 -1 -1. Using the above technique, you are to calculate w(a, b, c) efficiently and print the result.
Output
Print the value for w(a,b,c) for each triple.
Sample Input
Sample Output
Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 14985 | Accepted: 7758 |
We all love recursion! Don't we?
Consider a three-parameter recursive function w(a, b, c):
if a <= 0 or b <= 0 or c <= 0, then w(a, b, c) returns:
1
if a > 20 or b > 20 or c > 20, then w(a, b, c) returns:
w(20, 20, 20)
if a < b and b < c, then w(a, b, c) returns:
w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c)
otherwise it returns:
w(a-1, b, c) + w(a-1, b-1, c) + w(a-1, b, c-1) - w(a-1, b-1, c-1)
This is an easy function to implement. The problem is, if implemented directly, for moderate values of a, b and c (for example, a = 15, b = 15, c = 15), the program takes hours to run because of the massive recursion.
Input
The input for your program will be a series of integer triples, one per line, until the end-of-file flag of -1 -1 -1. Using the above technique, you are to calculate w(a, b, c) efficiently and print the result.
Output
Print the value for w(a,b,c) for each triple.
Sample Input
1 1 1 2 2 2 10 4 6 50 50 50 -1 7 18 -1 -1 -1
Sample Output
w(1, 1, 1) = 2 w(2, 2, 2) = 4 w(10, 4, 6) = 523 w(50, 50, 50) = 1048576 w(-1, 7, 18) = 1
代码:
#include<stdio.h> #include<string.h> int ans[22][22][22]; int w(int a,int b,int c) { if(a<=0 || b<=0 || c<=0) return 1; if(a>20 || b>20 || c>20) return ans[20][20][20]=w(20,20,20); if(ans[a][b][c]) return ans[a][b][c]; if(a<b && b<c) return ans[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c); else return ans[a][b][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); } int main() { int a,b,c,res; memset(ans,0,sizeof(ans)); while(scanf("%d %d %d",&a,&b,&c),!(a==-1 && b==-1 && c==-1)) { res=w(a,b,c); printf("w(%d, %d, %d) = %d\n",a,b,c,res); } return 0; }
相关文章推荐
- 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
- 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
- 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
- poj 1579 Function Run Fun
- poj 1579 Function Run Fun
- POJ-1579 Function Run Fun
- POJ 1579 Function Run Fun