以为很复杂,但是代码其实很直观。
#include <stdio.h>
#include <string.h>
#define N 101
int dp[N][N];
int main ()
{
int t,n,m,i,j,k,l,num;
scanf("%d",&t);
while (t--)
{
scanf ("%d %d",&n,&m);
memset(dp,0,sizeof(dp));
dp[0][0]=1;
for (i=0;i<n;i++)
{
for (j=0;j<m;j++)
{
scanf("%d",&num);
for (k=0;k<=num;k++)
{
for (l=0;l+k<=num;l++)
{
if(i + k <= n && j +l <= m)
{
if (k==0 && l==0) continue;
dp[i+k][j+l]=(dp[i+k][j+l]+dp[i][j])%10000;
}
}
}
}
}
printf ("%d\n",dp[n-1][m-1]);
}
return 0;
}

本文通过一个具体的编程实例介绍了如何使用二维动态规划解决问题。代码采用C语言实现,并详细展示了通过输入矩阵逐步更新状态转移表的过程,最终求得目标状态的值。
857

被折叠的 条评论
为什么被折叠?



