这道题是传说中的动态规划吧,嘎嘎~ 虽说简单了些。。 题目地址 #include<stdio.h> #include<string.h> #define M 101 int ww[M][M][M]; long long w(int x,int y,int z) { if(x<=0||y<=0||z<=0) return 1; if(ww[x][y][z]) return ww[x][y][z]; if(x>20||y>20||z>20) { ww[x][y][z]=w(20,20,20); return ww[x][y][z]; } if(x<y&&y<z) { ww[x][y][z]=w(x,y,z-1)+w(x,y-1,z-1)-w(x,y-1,z); return ww[x][y][z]; } ww[x][y][z]=w(x-1,y,z)+w(x-1,y-1,z)+w(x-1,y,z-1)-w(x-1,y-1,z-1); return ww[x][y][z]; } int main() { int a,b,c,i,j,k; while(scanf("%d%d%d",&a,&b,&c)!=EOF) { if(a==-1&&b==-1&&c==-1) break; memset(ww,0,sizeof(ww)); printf("w(%d, %d, %d) = %lld/n",a,b,c,w(a,b,c)); } } 内存用的有点多。