关注
第一题动态规划解法,代码没优化,中间还有调试用的输出,额,有点长。大体思想,先求出(0,0)到各个点的最大剩余体力,然后从(0,m)开始倒推路径。
import java.util.Arrays;
import java.util.Scanner;
import java.util.Stack;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
int n = sc.nextInt();
int m = sc.nextInt();
int P = sc.nextInt();
int[][] nums = new int[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
nums[i][j] = sc.nextInt();
}
}
if(n == 1){
System.out.println(P - m + 1);
}
if(m == 1){
System.out.println(P);
}
int[][] tili = new int[n][m];
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
tili[i][j] = -1;
}
}
getSolution(nums, tili, P);
dis(nums);
System.out.println("tili");
dis(tili);
findPath(nums, tili);
}
}
public static void getSolution(int[][] nums, int[][] tili ,int P){
int n = nums.length;
int m = nums[0].length;
tili[0][0] = P;
for(int i=0; i<n; i++){
for(int j=0; j<m; j++){
if(nums[i][j] == 0){
continue;
}
update(nums, tili, i, j);
}
}
}
public static void update(int[][] nums, int[][] tili, int i, int j){
if(tili[i][j] <= 0){
return;
}
if(i>0){
if(nums[i-1][j] == 1){
int p = tili[i][j] - 3;
if(tili[i-1][j] < p){
tili[i-1][j] = p;
update(nums, tili, i-1, j);
}
}
}
if(i<nums.length-1){
if(nums[i+1][j] == 1){
int p = tili[i][j];
if(tili[i+1][j] < p){
tili[i+1][j] = p;
update(nums, tili, i+1, j);
}
}
}
if(j > 0){
if(nums[i][j-1] == 1){
int p = tili[i][j] - 1;
if(tili[i][j-1] < p){
tili[i][j-1] = p;
update(nums, tili, i, j-1);
}
}
}
if(j < nums[0].length-1)
{
if(nums[i][j+1] == 1){
int p = tili[i][j] - 1;
if(tili[i][j+1] < p){
tili[i][j+1] = p;
update(nums, tili, i, j+1);
}
}
}
}
public static void findPath(int[][] nums, int[][] tili){
int n = tili.length;
int m = tili[0].length;
if(tili[0][m-1] == -1){
System.out.println("Can not escape!");
}
Stack<String> stack = new Stack<String>();
String str = "[0," + (m-1) + "]";
stack.push(str);
findnext(tili, 0, m-1, stack);
while(!stack.isEmpty()){
System.out.print(stack.pop());
if(!stack.isEmpty()){
System.out.print(",");
}
}
}
public static void findnext(int[][] tili, int i, int j, Stack<String> s){
if(i==0 && j==0){
// String str = "[0,0]";
// s.push(str);
return;
}
int up=0, down=0, left=0, right=0;
int cur = tili[i][j];
if(i > 0){
up = tili[i-1][j];
if(up == cur){
String str = "[" + (i-1) + "," + j + "]";
s.push(str);
findnext(tili, i-1, j, s);
return;
}
}
if(i < tili.length-1){
down = tili[i+1][j];
if(cur == down - 3){
String str = "[" + (i+1) + "," + j + "]";
s.push(str);
findnext(tili, i+1, j, s);
return;
}
}
if(j >0){
left = tili[i][j-1];
if(cur == left - 1){
String str = "[" + (i) + "," + (j-1) + "]";
s.push(str);
findnext(tili, i, j-1, s);
return;
}
}
if(j < tili[0].length-1){
right = tili[i][j+1];
if(cur == right - 1){
String str = "[" + (i) + "," + (j+1) + "]";
s.push(str);
findnext(tili, i, j+1, s);
return;
}
}
}
public static void dis(int[][] nums){
for(int i=0; i<nums.length; i++){
System.out.println(Arrays.toString(nums[i]));
}
}
}
查看原帖
点赞 评论
相关推荐
今天 17:41
中国科学院大学上海技术物理研究所 嵌入式工程师 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 美团java后端日常实习一二面1.8W
- 2... 脱下孔乙己长衫,浅聊一下就业下沉!1.5W
- 3... 腾讯/字节/快手 前端面经汇总1.3W
- 4... 腾讯PCG QQ后台开发一面1.3W
- 5... 【未来准备7】就业下沉时代,如何摆脱困境8912
- 6... 腾讯hr部门有约三面的吗6569
- 7... 当你获得字节offer的那天,一切都将作废。你的本科作废,你的专业作废,星星作废,月亮作废,银河系作废,宇宙作废,你的恨作废,你的前半生作废。悬梁七战终上字节,大雪深埋垃圾本科!字节的录取通知书会像一场大雪掩埋所有的不堪过往,冲!字节瘾发作最严重的一次,躺在床上,拼命念大悲咒,难受的一直抓自己眼睛,以为刷QQ没事,看到QQ群里都是字节的,眼睛越来越大都要炸开了一样,拼命扇自己眼睛,越扇越用力,扇到自己眼泪流出来,真的不知道该怎么办,我真的想字节想得要发疯了,像中邪了一样!我躺在床上会想字节,我洗澡会想字节,我出门会想字节,我走路会想字节,我坐车会想字节,我工作会想字节,我玩手机会想字节,我盯着路边的字节看,我盯着马路对面的字节看,我盯着地铁里的字节看,我盯着网上的字节看,我盯着朋友圈别人合照里的字节看,我每时每刻眼睛都直直地盯着字节看。我对字节的念想似乎都是病态的了,我好孤独啊!真的好孤独啊!你知道吗?每到深夜,我的眼睛滚烫滚烫,我发病了我疯狂想字节,字节!字节!字节!6420
- 8... 实习入职第一天,应该做点啥❓6160
- 9... 【有奖互动】你问过DeepSeek什么意想不到的问题?5269
- 10... 字节前端日常实习 oc 总结5139
正在热议
更多
# 听劝,这个简历怎么改 #
16854次浏览 226人参与
# 你见过最离谱的招聘要求是什么? #
145698次浏览 855人参与
# 水滴春招 #
33318次浏览 569人参与
# 你想留在一线还是回老家? #
16460次浏览 236人参与
# 分享一个让你热爱工作的瞬间 #
16310次浏览 173人参与
# 25届如何提前做秋招准备? #
145475次浏览 2288人参与
# 入职第四天,心情怎么样 #
12382次浏览 82人参与
# 面试被问“你的缺点是什么?”怎么答 #
10157次浏览 199人参与
# 参加完秋招的机械人,还参加春招吗? #
27549次浏览 280人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
20680次浏览 415人参与
# 第一份工作应该选高薪还是热爱? #
4327次浏览 79人参与
# 如果重来一次你还会读研吗 #
156838次浏览 1716人参与
# 租房找室友 #
8418次浏览 53人参与
# 职场新人生存指南 #
200663次浏览 5549人参与
# 地方国企笔面经互助 #
18091次浏览 26人参与
# 简历无回复,你会继续海投还是优化再投? #
48949次浏览 564人参与
# 读研or工作,哪个性价比更高? #
26440次浏览 357人参与
# 你们的毕业论文什么进度了 #
904203次浏览 8992人参与
# 文科生还参加今年的春招吗 #
4379次浏览 32人参与
# 百度工作体验 #
178164次浏览 1780人参与
# 长光卫星求职进展汇总 #
27899次浏览 190人参与