uva 10285 - Longest Run on a Snowboard
来源:互联网 发布:mac vmware删除win七 编辑:程序博客网 时间:2024/05/16 13:04
import java.io.*;import java.util.*;class node implements Comparable<node>{ int x,y,value; public node(int a,int b,int c){ x=a;y=b;value=c; } @Override public int compareTo(node t) { return value - t.value; }}public class Main{ public static int dfs(int k,int[] dp,node ori[], int step, int a, int b){ if(dp[k]!=0) return dp[k]+1; int[][] dir = {{-1,0},{0,-1},{1,0},{0,1}}; int max = step; for(int i=0;i<4;i++){ int new_x = ori[k].x+dir[i][0]; int new_y = ori[k].y+dir[i][1]; if(new_x>=0&&new_x<a&&new_y>=0&&new_y<b){ int tmp = new_x*b+new_y; if(ori[tmp].value>=ori[k].value) continue; int temp = dfs(tmp,dp,ori,step+1,a,b); max = temp>max?temp:max; } } return max; } public static void main(String[] args) throws Exception { Scanner scan = new Scanner(System.in); int n = scan.nextInt(); while(n-->0){ String desc = scan.next(); int x = scan.nextInt(); int y = scan.nextInt(); node[] table = new node[x*y]; for(int i=0;i<x;i++){ for(int j=0;j<y;j++){ table[i*y+j] = new node(i,j,scan.nextInt()); } } node[] copy = Arrays.copyOf(table,x*y); Arrays.sort(table); int dp[] = new int[x*y]; int max = 1; for(int i=0;i<table.length;i++){ int index = table[i].x*y+table[i].y; dp[index] = dfs(index,dp,copy,1,x,y); max = dp[index]>max?dp[index]:max; } System.out.println(desc+": "+max); } }}
最开始居然在用BFS写,脑袋不清楚啊TMD,BFS做最短路径的啊,这个如此明显的最长路径,我还在写BFS。。。
代码写了一半发现逻辑错得离谱,然后改DFS.
先按值排序,这样就会从值最小的点开始走,最小的点明显是1, 然后次小的点,路径长可能是1或者2.
这样做到后面的点的时候,比如做到值为20的点,然后这个点相邻的有比他值小的点,比如18, 那么可以确保以18为终点的路长已经被计算过
并且储存在dp这个数组里,那么在深搜的过程中就可以直接返回结果。就是所谓的记忆化搜索?。。。
人生悲剧至此,此题1Y居然是平淡生活中很令人振奋的一刻。。。
上班上的我都快无语了。下班A题还是很累啊,8个小时忙碌的工作后脑袋不灵光,想题的时候感觉脑袋很重。。。
不过这种状态能完全自己做出这题来, 并且1A还是很开心的。
- uva 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- uva 10285 - Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- UVa 10285 Longest run on a snowboard
- UVA-10285-Longest Run on a Snowboard
- UVa:10285 Longest Run on a Snowboard
- UVA - 10285 Longest Run on a Snowboard
- uva 10285 Longest Run on a Snowboard
- UVA 10285 - Longest Run on a Snowboard
- UVa 10285 - Longest Run on a Snowboard
- UVA - 10285 Longest Run on a Snowboard
- UVA - 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- UVA 10285 Longest Run on a Snowboard
- 汇编标志位
- Android-Java移动GIS开源项目Osmdroid分析手记(一):第一次亲密接触
- UVa 10069 - Distinct Subsequences
- 使用twitter app原生接口登录(Native)
- 【练习12】 贪心算法 1003 Moving Tables
- uva 10285 - Longest Run on a Snowboard
- 黑马程序员-(7)Java基础之面向对象(二)静态
- 如何实现由Google Apps向Office 365的过渡?
- csapp2e 家庭作业 2.94
- linux进程的信号通信与进程的管道通信
- jquery解决和其他库冲突的问题
- 黑马程序员-(8)Java基础之面向对象(三)继承
- 巧用javascript数组实现数据结构-堆栈与队列
- 判断是否溢出