CCPC-Wannafly Winter Camp Day1 (Div2, onsite) B 吃豆豆 [DP]

忘记把地图赋值成-inf了

wls在玩一个游戏。wlswlswls有一个nnn行mmm列的棋盘,对于第iii行第jjj列的格子,每过T[i][j]T[i][j]T[i][j]秒会在上面出现一个糖果,第一次糖果出现在第T[i][j]T[i][j]T[i][j]秒,糖果仅会在出现的那一秒存在,下一秒就会消失。假如wlswlswls第kkk秒在第iii行第jjj列的格子上,满足T[i][j]∣kT[i][j] | kT[i][j]∣k,则wlswlswls会得到一个糖果。假如当前wlswlswls在第iii行第jjj列的格子上,那么下一秒他可以选择往上下左右走一格或停在原地。现在请问wlswlswls从指定的SSS出发到达指定的TTT,并且在路上得到至少CCC个糖果最少需要多少时间?wlswlswls在SSS的初始时间为第000秒。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 10000+25 ;

int n,m,k;
int sx,sy,ex,ey;
int mp[15][15];
int dp[15][15][maxn];

int main() {
	cin>>n>>m>>k;
	for(int i=1;i<=n;i++) for(int j=1;j<=m;j++) cin>>mp[i][j];
	cin>>sx>>sy>>ex>>ey;
	
	memset(dp,-0x3f,sizeof(dp));
	dp[sx][sy][0]=0; 
	
	for(int t=1;t<maxn;t++){
		for(int i=1;i<=n;i++){
			for(int j=1;j<=m;j++){
				 dp[i][j][t]=max(dp[i-1][j][t-1],max(dp[i][j+1][t-1],max(dp[i+1][j][t-1],max(dp[i][j-1][t-1],dp[i][j][t-1]))))+(t%mp[i][j]==0?1:0);
			}
		}
	}
	
	for(int i=1;i<maxn;i++){
		if(dp[ex][ey][i]>=k){
			cout<<i<<endl;
			break;
		}
	}
	return 0;
}
全部评论

相关推荐

11-15 19:28
已编辑
蚌埠坦克学院 硬件开发
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务