华为2016年机试题 第三题详解
来源:互联网 发布:陌陌滚刀软件安卓 编辑:程序博客网 时间:2024/05/07 10:18
题目记得不太清了,大概意思是:一个数组,都是正整数,最多连续取两个,求如何取取得的数相加和最大。
这是一个比较基础的动态规划问题,可以按照常规的状态递推思路。 开辟数组data[3][n], 令data[0][n] 表示数组arr中第n个数不选,data[1][n]表示数组arr中第n个数选,第n-1个数不选,data[2][n]表示第n和第n-1个数选了。这类问题主要推导出迁移公式就好做了,见代码:
java 代码如下:
public class HWPro3 { public static void main(String arg[]){ int[] data = {1,9,1,9,9,9,9}; System.out.println(maxValue(data)); } public static int maxValue(int[] data){ int N = data.length; if(N<=2){ return (N==1)?data[0]:(data[0]+data[1]); } int[][] arr = new int[N][3]; arr[1][0] = data[0]; arr[1][1] = data[1]; arr[1][2] = data[0]+data[1]; for (int i = 2; i < N; i++) { //状态迁移公式,动态规划核心部分 arr[i][0] = max(arr[i-1][0], arr[i-1][1], arr[i-1][2]); //第i个数不选时 arr[i][1] = arr[i-1][0]+data[i]; //第i个数选,第i-1个数不选时 arr[i][2] = arr[i-1][1]+data[i]; //第i个数选,第i-1个数也选时} return max(arr[N-1][0], arr[N-1][1],arr[N-1][2]);} public static int max(int a, int b){ return a>b?a:b; } public static int max(int a,int b,int c){ return a>b&&a>c?a:(b>c?b:c); }}
1 0
- 华为2016年机试题 第三题详解
- 华为机试题第三题
- 华为2016机试题
- 2016华为机试题
- 华为面试题详解
- 2015届华为校园招聘机试题<第三题等式变换>
- 等式变换(2015届华为校园招聘机试题第三题 )
- 2011华为校园招聘重庆试题第三题
- 华为2016机试题目
- 华为2016实习机试题
- 2012年 华为机试题
- 华为机试题2012年
- 华为13年机试题
- 华为2013年机试题
- 华为2016校园招聘机试第三题
- 2014华为招聘机试第三题
- 华为2012机试第三题
- 2016华为机试题(不知到底是不是)
- Linux 终端中常用的快捷键
- Proc_BuildTableHtml(根据SQL生成表格形式的html)
- Servlet+spring+mybatis结合传输json数组
- 快速Android开发系列通信篇之EventBus
- lijhtoj 1078 Integer Divisibility (简单同余数题)
- 华为2016年机试题 第三题详解
- HCE基础知识
- 2016--CCPC--长春站总结
- ClippingNode终极版
- Tomcat 默认项目工程配置
- windows10-64bit python2.7.6 配置numpy
- RHEL4:linux文件管理的基本命令
- POJ 3279 枚举?
- 游戏编程模式:轻量级(Flyweight)模式(Part III)