代码很简单
做的时候也知道是dp
但是就是推不出来,想不到
我他妈的废物一个
cin>>n>>m>>k; for(int i=1,x;i<=n;i++){ for(int j=1;j<m;j++){ scanf("%d",&x); r[i][j]=l[i][j+1]=x; } } for(int i=1,x;i<n;i++){ for(int j=1;j<=m;j++){ scanf("%d",&x); d[i][j]=u[i+1][j]=x; } } if(k&1){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++)printf("-1 "); printf(" "); } return; } for(int c=1;c<=k/2;c++){ for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ ans[i][j][c]=1e18; if(i>1)ans[i][j][c]=min(ans[i][j][c],ans[i-1][j][c-1]+u[i][j]); if(i<n)ans[i][j][c]=min(ans[i][j][c],ans[i+1][j][c-1]+d[i][j]); if(j>1)ans[i][j][c]=min(ans[i][j][c],ans[i][j-1][c-1]+l[i][j]); if(j<m)ans[i][j][c]=min(ans[i][j][c],ans[i][j+1][c-1]+r[i][j]); } } } for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++) printf("%lld ",ans[i][j][k/2]*2); printf(" "); } }