题意:把一个递归方程改为迭代的写法。
题解:三重循环迭代递推。
AC代码:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
1 #include<cstdio> 2 const int N=25; 3 int a,b,c,dp[N][N][N]; 4 int solve(){ 5 if(a<=0||b<=0||c<=0)return 1; 6 if(a>20||b>20||c>20)a=b=c=20; 7 for(int i=0;i<=a;i++) 8 for(int j=0;j<=b;j++) 9 for(int k=0;k<=c;k++){ 10 if(i==0||j==0||k==0)dp[i][j][k]=1; 11 else if(i<j&&j<k)dp[i][j][k]=dp[i][j][k-1]+dp[i][j-1][k-1]-dp[i][j-1][k]; 12 else dp[i][j][k]=dp[i-1][j][k]+dp[i-1][j-1][k]+dp[i-1][j][k-1]-dp[i-1][j-1][k-1]; 13 } 14 return dp[a][b][c]; 15 } 16 int main() 17 { 18 while(scanf("%d %d %d",&a,&b,&c)!=EOF){ 19 if(a==-1&&b==-1&&c==-1)break; 20 printf("w(%d, %d, %d) = ",a,b,c); 21 printf("%d\n",solve()); 22 } 23 return 0; 24 }