蓝桥杯 地宫取宝 各种DP模型合体
https://www.acwing.com/problem/content/1214/
4维DP 状态很难想出来。 具体可以看题解
https://www.acwing.com/solution/content/7116/
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<vector>
#include<queue>
#include<stack>
#include<cstring>
#include<unordered_map>
using namespace std;
typedef long long LL;
int a[55][55];
int f[55][55][15][15];//在i,j时拿了cnt个最大价值为c的方案数
int n,m,k;
const int mod=1000000007;
int main(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin>>a[i][j];
a[i][j]++;
}
}
f[1][1][0][0]=1;
f[1][1][1][a[1][1]]=1;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
for(int cnt=0;cnt<=k;cnt++){
for(int c=0;c<=15;c++){
//不拿
f[i][j][cnt][c]=(f[i][j-1][cnt][c]+f[i][j][cnt][c])%mod;
f[i][j][cnt][c]=(f[i-1][j][cnt][c]+f[i][j][cnt][c])%mod;
if(a[i][j]==c && cnt>0){
for(int s=0;s<a[i][j];s++){
f[i][j][cnt][c]=(f[i][j-1][cnt-1][s]+f[i][j][cnt][c])%mod;
f[i][j][cnt][c]=(f[i-1][j][cnt-1][s]+f[i][j][cnt][c])%mod;
}
}
}
}
}
}
int res=0;
for(int i=1;i<=15;i++){
res=(f[n][m][k][i]+res)%mod;
}
printf("%d\n", res);
return 0;
}
// freopen("testdata.in", "r", stdin);

浙公网安备 33010602011771号