hrbust Function Run Fun
来源:互联网 发布:小米机械键盘 知乎 编辑:程序博客网 时间:2024/06/06 07:25
这题就怕te
递归可以
也可以直接迭代出所有情况
关系式别看错了就好
Function Run FunTime Limit: 1000 MSMemory Limit: 65536 KTotal Submit: 380(184 users)Total Accepted: 198(170 users)Rating: Special Judge: NoDescriptionWe 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.
Print the value for w(a,b,c) for each triple.
Sample Input1 1 12 2 2
10 4 6
50 50 50
-1 7 18
-1 -1 -1Sample Outputw(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 re[25][25][25];int w(int a,int b,int c){ if (a <= 0 || b <= 0 || c <= 0) return 1; if(re[a][b][c]) return re[a][b][c]; if(a > 20 | b > 20 | c > 20) return w(20,20,20); if(a < b && b < c) return re[a][b][c]=w(a, b, c-1) + w(a, b-1, c-1) - w(a, b-1, c) ; return re[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 n,m,z; memset(re,0,sizeof(re)); while(~scanf("%d%d%d",&n,&m,&z)) { if(n==-1&&m==-1&&z==-1)break; if(n<=0||m<=0||z<=0) printf("w(%d, %d, %d) = 1\n",n,m,z); else if(n>20||m>20||z>20) printf("w(%d, %d, %d) = %d\n",n,m,z,w(20,20,20)); else printf("w(%d, %d, %d) = %d\n",n,m,z,w(n,m,z)); }}
解法二 迭代
#include<stdio.h>int a[25][25][25];int main(){ for(int i=0; i<=20; i++) { for(int j=0; j<=20; j++) { for(int k=0; k<=20; k++) { if(i==0||j==0||k==0) { a[i][j][k]=1; continue; } if(i<j&&j<k) a[i][j][k]=a[i][j][k-1]+a[i][j-1][k-1]-a[i][j-1][k]; else a[i][j][k]= a[i-1][j][k]+a[i-1][j-1][k]+a[i-1][j][k-1]-a[i-1][j-1][k-1]; // printf("%d ",a[i][j][k]); } // printf("\n"); } //printf("\n"); } int n,m,z; while(~scanf("%d%d%d",&n,&m,&z)) { if(n==-1&&m==-1&&z==-1)break; if(n<=0||m<=0||z<=0) printf("w(%d, %d, %d) = 1\n",n,m,z); else if(n>20||m>20||z>20) printf("w(%d, %d, %d) = %d\n",n,m,z,a[20][20][20]); else printf("w(%d, %d, %d) = %d\n",n,m,z,a[n][m][z]); }}
- hrbust Function Run Fun
- Function Run Fun(ZJU_1168)
- PKUOJ1579 Function Run Fun
- Function Run Fun
- poj1579 Function Run Fun
- [ACM]Function Run Fun
- POJ1579:Function Run Fun
- Function Run Fun
- Function Run Fun
- 1626. Function Run Fun
- POJ Function Run Fun
- POJ1579.Function Run Fun
- Function Run Fun
- HDU1331 Function Run Fun
- Function Run Fun
- HDU Function Run Fun
- Function Run Fun poj1579
- Function Run Fun POJ
- CSS常用属性
- 魅蓝note2真机调试遇到的一个小问题
- Python3学习笔记-数据类型和变量
- 状态压缩DP入门
- linux input/output error
- hrbust Function Run Fun
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave
- 一种基于struts2 拦截器 和 log4j的轻量级crm权限及行为跟踪方式
- 【数据库开发】Redis数据库服务器启动配置
- 反射——Java高级开发必须懂的
- Window下LDAP的安装和配置
- 【数据库开发】Redis数据库设置密码
- Selenium定位属性自动切换的实现方法
- 半年总结—遇见未知的自己