分析
这题用深搜最好只能拿50分,所以要用另一种算法:动态规划。
设f[i,j,k]表示:走到格子[i,j]时累计值为k的方案数
动态转移方程:f[i,j,k]:=f[i,j,k]+f[i-1,j,k-a[i,j]]+f[i,j-1,k-a[i,j]]
因为数值太大,你只需要输出结果除以
(10^9 + 7) 的 余数
所以以上的动态转移方程准确来说应是:
f[i,j,k]:=(f[i,j,k]+f[i-1,j,k-a[i,j]]+f[i,j-1,k-a[i,j]])mod1000000007
程序:
var
n,m,p,i,j,k:longint;
f:array[0..101,0..101,-10..1501]of int64;
a:array[0..100,0..100]of longint;
begin
readln(n,m,p);
for i:=1 to n do
for j:=1 to m do
read(a[i,j]);
f[0,1,0]:=1;
for i:=1 to n do
for j:=1 to m do
for k:=a[i,j] to p do
f[i,j,k]:=(f[i,j,k]+f[i-1,j,k-a[i,j]]+f[i,j-1,k-a[i,j]]) mod 1000000007;
write(f[n,m,p] mod 1000000007);
end.