关注
第一题动态规划解法,代码没优化,中间还有调试用的输出,额,有点长。大体思想,先求出(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]));
}
}
}
查看原帖
点赞 评论
相关推荐
程序员牛肉:不用,你低估你学历的含金量了。
不用学微服务,重心放到juc,redis和mysql的八股上。然后准备两个简历项目。直接准备明年暑期就好。南京大学都算是国内比较顶尖的985了。明年暑期零实习也能被约面。不用太焦虑 点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
- 1... 工作半年后更确定:我们依然不欠优绩主义什么6094
- 2... 我建了一个分享实习业务的仓库,欢迎大家贡献哦3858
- 3... 岁末论道:谁才是牛客 2025 最强修仙者?3260
- 4... #牛客2025仙途报告#居然是五颗星2663
- 5... 腾讯 微信支付一面面经2394
- 6... 【2025-年终总结】25届毕业生果果牛这一年~2342
- 7... 仙途报告2075
- 8... 一个程序员的自救书|从酒吧陪玩DM到上岸大厂1795
- 9... 在当下这个社会,在人生这个无常的时代,我真心希望你和各位牛友开心1575
- 10... 关于我在某小厂实习半个月后在圣诞节当天被开除1457
正在热议
更多
# 牛客2025仙途报告 #
11552次浏览 224人参与
# 实习要如何选择和准备? #
129662次浏览 1496人参与
# 2025年终总结 #
192455次浏览 3233人参与
# 上班后和你想的一样吗? #
95055次浏览 701人参与
# 你有哪些缓解焦虑的方法? #
44378次浏览 867人参与
# 找工作,行业重要还是岗位重要? #
87108次浏览 1740人参与
# 今年你最想重开的一场面试是? #
11148次浏览 122人参与
# 元旦假期你打算怎么过 #
628次浏览 19人参与
# 你面试体验感最差/最好的公司 #
27941次浏览 462人参与
# 礼物开箱Plog #
2968次浏览 100人参与
# 一人说一个提前实习的好处 #
20784次浏览 289人参与
# 秋招落幕,你是He or Be #
21464次浏览 366人参与
# 我们是不是被“优绩主义”绑架了? #
1431次浏览 56人参与
# 没有合适的工作,你会先找个干着,还是考公考研 #
149197次浏览 1241人参与
# 机械人晒出你的简历 #
148029次浏览 885人参与
# 工作中听到最受打击的一句话 #
11963次浏览 170人参与
# 重来一次,你会对开始求职的自己说 #
9652次浏览 236人参与
# 实习没事做是福还是祸? #
22903次浏览 332人参与
# 工作两年,想和老板谈涨薪怎么说 #
39103次浏览 176人参与
# 实习的内耗时刻 #
212709次浏览 1580人参与