标签:
Description
Input
Output
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 a,b,c; int ans[21][21][21]; 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 w(20,20,20); } if(ans[a][b][c]) return ans[a][b][c]; if(a<b&&b<c) { ans[a][b][c]=w(a,b,c-1)+w(a,b-1,c-1)-w(a,b-1,c); } else { 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); } return ans[a][b][c]; } int main() { while(scanf("%d%d%d",&a,&b,&c)&&a+b+c!=-3) { memset(ans,0,sizeof(ans)); w(a,b,c); printf("w(%d, %d, %d) = %d\n",a,b,c,w(a,b,c)); } return 0; }
HDU-1331-Function Run Fun(动态规划3)
标签:
原文地址:http://www.cnblogs.com/tianmin123/p/4648233.html