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 }

 

posted @ 2017-01-24 14:58  jintg  阅读(118)  评论(0编辑  收藏  举报