编程题-年终奖

简介: 小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,请设计一个算法使小东拿到价值最高的礼物。

小东所在公司要发年终奖,而小东恰好获得了最高福利,他要在公司年会上参与一个抽奖游戏,游戏在一个6*6的棋盘上进行,上面放着36个价值不等的礼物,每个小的棋盘上面放置着一个礼物,他需要从左上角开始游戏,每次只能向下或者向右移动一步,到达右下角停止,一路上的格子里的礼物小东都能拿到,

请设计一个算法使小东拿到价值最高的礼物

给定一个6*6的矩阵board,其中每个元素为对应格子的礼物价值,左上角为[0,0],请返回能获得的最大价值,保证每个礼物价值大于100小于1000。

分析:运用了动态规划思想,求最优解。

    注意二维数组的循环,要用两层循环,外层循环行,内层循环列。、

如:int board[][]=new int[4][3];

  for(int i=0;i<board.length;i++){//外层循环行

    for(int j=0;j<board[0].length;j++){//内层循环列

  }

}

 

public class DynamicPro{
	public static void main(String[] args) {
			int board[][]={
						   {564 ,448 ,654 ,186 ,490 ,699},
						   {487 ,444 ,563 ,228 ,365 ,261},
						   {429 ,505 ,612 ,564 ,715 ,726},
						   {464 ,617 ,234 ,647 ,702 ,263},
						   {245 ,249 ,231 ,462 ,453 ,646},
						   {669 ,510 ,492 ,512 ,622 ,135}
						  };

						  System.out.print(getMost(board));
						 } 
			//基于动态规划的思想,不仅仅局限于6*6矩阵,适用于所有的N*M矩阵以及所有的方阵。
		public static int getMost(int[][] board) { 
        //两个for循环用来遍历二维数组不用多说。
	        for(int i = 0 ; i<board.length ; i++){//外层循环行
	            for(int j = 0 ; j <board[0].length ; j++){//内层循环列
	                if(i==0&&j==0){
	                    //如果是起点坐标,不做任何处理。
	                }else if(i == 0){
	                    //如果走在行的临界边,也就是要在第一行走的话,那么他只能向右走
	                    //向右走的时候该点就要将后面的值加起来。
	                    board[i][j] += board[i][j-1];
	                }else if(j == 0){
	                    //如果走在列的临界边,也就是要在第一列走的话,那么他只能向下走
	                    //向下走的时候该点就要将上面的值加起来。
	                    board[i][j] += board[i-1][j];
	                }else{
	                    //核心点在这,除去两个临界边,剩下的就是既能向右走,也能向下走,
	                    //那么这时候就要考虑走到当前点的所有可能得情况,也就是走到当前点
	                    //各自路径的和是不是这些所有到达该点路径当中最大的了。
	                    //temup用来存储从该点上面走下来的最大路径和。
	                    //templeft用来存储从该点左边走过来的最大路径的和,
	                    int temup = board[i-1][j];
	                    int templeft = board[i][j-1];
	                  //这两者肯定只能选其一,进行比较,那个大,就把这个值加给当前点,
	                  //因为从一开始我们就进行了大小的比较,每一个点存储的都是到达当前点
	                  //的最大值。所以直到最后一个点为止,她的值就是当前最大值的和。只要返回
	                  //最后一个点的内容就可以了。
	                    if(temup>templeft){
	                        board[i][j] +=temup ;
	                    }else{
	                        board[i][j] +=templeft;
	                    }
	                }
	            }
	        }
        /*  初始数组的情况。
            564 448 654 186 490 699
            487 444 563 228 365 261
            429 505 612 564 715 726
            464 617 234 647 702 263
            245 249 231 462 453 646
            669 510 492 512 622 135 
         */
        /*结束后返回的数组。
        564     1012    1666    1852    2342    3041   
        1051    1495    2229    2457    2822    3302   
        1480    2000    2841    3405    4120    4846   
        1944    2617    3075    4052    4822    5109   
        2189    2866    3306    4514    5275    5921   
        2858    3376    3868    5026    5897    6056
        可以看到,最后一个坐标点的值6056,他就是当前最优的路径所得出来的值
         */
        return  board[board.length-1][board[0].length-1];
    	}
}

  结果:

技术分享

 

编程题-年终奖

标签:算法   class   style   log   com   http   la   sp   src   

原文:http://www.cnblogs.com/GumpYan/p/5838094.html

目录
相关文章
|
7月前
|
程序员
35岁,程序员的一道坎
35岁,程序员的一道坎
|
10月前
|
人工智能 IDE 算法
【周末闲谈】新的编程方式,程序员的未来何在?
【周末闲谈】新的编程方式,程序员的未来何在?
76 0
|
算法 程序员 编译器
小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,天才程序员王小波
二十六年前,王小波先生因病于北京逝世,享年四十四周岁。喜爱他的人,都知道他是一个特立独行的人,拥有谦虚与自豪并存的强大气质,并且留下无数传世作品,无可争议的文坛巨擘,他的力量、有趣,对媚众形式束缚的反抗,以及一以贯之的,对待生活无比真诚的态度都让我们为之倾倒。 然而,鲜为人知的是,他不仅仅在文学上造诣非凡,与此同时,他还是一位不世出的编程奇才。在整个九十年代,除了和文字跳舞,王小波还将他的才华通过键盘喷涌而出,天才的脑细胞幻化为一行一行的代码, 挥洒自如,回转如意。王小波在编程领域的惊人艺业,我们也许可以通过他的书信以及著作中的内容略窥一二。
小波从此逝,江海寄余生,不但是文坛巨擘还是不世出的编程奇才,天才程序员王小波
|
前端开发 数据可视化 测试技术
绩效从C到S,分享渣渣程序员逆袭秘诀!
绩效面谈结束,从会议室出来,有一种不真实的感觉——这个季度我竟然拿了S?! 要知道,上个季度和上上个季度,我的绩效是C。 C在我司意味着什么你们知道吗? 拿3次C就意味着严重不胜任,公司就会让我收拾收拾包袱滚蛋。
绩效从C到S,分享渣渣程序员逆袭秘诀!
|
编解码 前端开发 程序员
刚入职的程序员做不好哪些事情容易被开除?
刚入职的程序员做不好哪些事情容易被开除?
733 0
|
存储 关系型数据库 MySQL
熬了整整30天,java面向对象编程基础实验报告
熬了整整30天,java面向对象编程基础实验报告
熬了整整30天,java面向对象编程基础实验报告
|
敏捷开发 开发框架 Java
软件开发启示录——迟到的领悟
我的软件开发生涯开始于15年前。 但是直到最近的5年,我才真正开始看到自己在软件开发领域的巨大进步。 这里有一些感悟是我希望能够在我进入软件开发领域时所知道的事情,如果我早一些领悟到,相信会比现在更加成功,也更节省一些时间。
137 0
|
Java 程序员 iOS开发
非典型程序员的办公桌
非典型程序员的办公桌
259 0
非典型程序员的办公桌
|
Java 程序员 应用服务中间件
停发年终奖背后,是程序员“失宠”了?
1月10日,在互联网职场上又有一件标志性事件发生,脉脉上有人爆料,称罗振宇的“得到”今年取消了APP团队年终奖,并且发布了内部信解释为何取消。 从落款上看,这次内部信是青衣快刀撰写的,与其所对话的APP技术团队相符。
1488 0