LINK: http://acm.hdu.edu.cn/showproblem.php?pid=1978
Sample Input
1
6 6
4 5 6 6 4 3
2 2 3 1 7 2
1 1 4 6 2 7
5 8 4 3 9 5
7 6 6 2 1 5
3 1 1 3 7 2
Sample Output
3948
o(╥﹏╥)o 一开始 题意读错
首先:题意是:从一个点出发刚开始的能量就是所在的这个方格的能量,之后到达一个点 这个时候的能量又变成新的能量值 注意能量不继承
中间两层 h,g表示从某个点开始向右向下走(枚举右下点)
所以是DP水题喽~
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=10000;
ll dp[105][105];
int mp[105][105];
int main()
{
int tt;scanf("%d",&tt);
while(tt--)
{
memset(dp,0,sizeof(dp));
int n,m;scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
scanf("%d",&mp[i][j]);
}
}
dp[1][1]=1;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
int now=mp[i][j];//cout<<now<<" ";
if(dp[i][j]==0) continue;
for(int h=0;h<=min(n-i,now);h++)
{
int f=now-h;
for(int g=0;g<=min(f,m-j);g++)
{
if(h==0&&h==g) continue;
(dp[i+h][j+g]+=dp[i][j])%=mod;
}
}
}
}
printf("%lld\n",dp[n][m]%mod);
}
}
UP UP PANDA