poj1579
1 #include <iostream> 2 using namespace std; 3 #define SIZE 3 4 int map[100][SIZE]; 5 int jisuan(int a,int b,int c); 6 int num[30][30][30]={0}; 7 int main() 8 { 9 int result; 10 int n; 11 for(int i=0;i<100;i++) 12 { 13 for(int j=0;j<SIZE;j++) 14 { 15 cin >>map[i][j]; 16 } 17 if(map[i][0]==-1&&map[i][1]==-1&&map[i][2]==-1) 18 { 19 n=i; 20 break; 21 } 22 } 23 24 for(int i=0;i<n;i++) 25 { 26 result=jisuan(map[i][0],map[i][1],map[i][2]); 27 cout <<"w("<<map[i][0]; 28 cout <<", "<<map[i][1]; 29 cout <<", "<<map[i][2]; 30 cout <<") = "<<result<<endl; 31 } 32 return 0; 33 } 34 35 36 int jisuan(int a,int b,int c) 37 { 38 if(a<=0||b<=0||c<=0) 39 return 1; 40 if(a>20||b>20||c>20) 41 return jisuan(20,20,20); 42 if(num[a][b][c]>0) 43 return num[a][b][c]; 44 if(a<b&&b<c) 45 num[a][b][c]=jisuan(a,b,c-1)+jisuan(a,b-1,c-1)-jisuan(a,b-1,c); 46 else 47 num[a][b][c]=jisuan(a-1,b,c)+jisuan(a-1,b-1,c)+jisuan(a-1,b,c-1)-jisuan(a-1,b-1,c-1); 48 return num[a][b][c]; 49 }