地宫取宝
下图有误:最后输出应该为f[n][m][k][0~13](因为可能存在一个也不取的情形,所以第4维应该包括0)
代码:
import java.util.*;
public class Main{
static int[][] map = new int[60][60];
static int[][][][] f = new int[60][60][15][14];
static int mod = 1000000007;
static int n;
static int m;
static int k;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
n = scan.nextInt();
m = scan.nextInt();
k = scan.nextInt();
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
map[i][j] = scan.nextInt();
map[i][j]++;
}
}
f[1][1][1][map[1][1]]=1;
f[1][1][0][0] = 1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
if(i==1&&j==1) continue;
for(int u =0;u<=k;u++){
for(int v=0;v<=13;v++){
f[i][j][u][v] = (f[i-1][j][u][v]+f[i][j-1][u][v])%mod;
if(u>0&&map[i][j]==v)
for(int w=0;w<v;w++){
f[i][j][u][v] = (f[i][j][u][v]+f[i][j-1][u-1][w])%mod;
f[i][j][u][v] = (f[i][j][u][v]+f[i-1][j][u-1][w])%mod;
}
}
}
}
}
int val = 0;
for(int i=0;i<=13;i++) val=(val+f[n][m][k][i])%mod;
System.out.print(val);
}
}
时间复杂度:O( n ∗ m ∗ k ∗ c 2 n*m*k*c^2 n∗m∗k∗c2)