关闭

校招编程题:求最优解题方案

标签: java动态规划
68人阅读 评论(0) 收藏 举报

题目:

一共有n道题,每道题有对应的分值grade和需要消耗的时间time,求解在规定的时间内,能得到最大的分数。

解题思路:

使用动态规划,求解最大分数。如果需要求解具体做题步骤,则需要把最大分数进行回溯,逐步找到做过的题。

这里由于题目只要求了求出最大分数,所以只编程实现了求解最大分数的目的。

代码如下:

package test;


public class DynamicProgrammingTest {
	private int length;
	private int[] grade;
	private int[] time;
	private int TimeSum;
	
	public DynamicProgrammingTest(int length,int grade[],int time[],int TimeSum) {
		// TODO Auto-generated constructor stub
		this.length = length;
		this.grade = grade;
		this.time = time;
		this.TimeSum = TimeSum;
	}
	
	public int getMaxGrade() {
		//画表格
		int MaxGrade[][] = new int[grade.length][TimeSum + 1];
		for (int i = 0;i < grade.length;i++) {
				MaxGrade[i][0] = 0;
		}
		for (int i = 0;i < TimeSum + 1;i++) {
			//这里用i <= time[0]一直不对。。卡了很久。。尬。。
			if (i < time[0]) {
				MaxGrade[0][i] = 0;
			}else {
				MaxGrade[0][i] = grade[0];
			}
		}
		//填表格
		for (int i = 1;i < grade.length;i++) {
			for (int j = 1;j < TimeSum + 1;j++) {
				if (j < time[i]) {
					MaxGrade[i][j] = MaxGrade[i-1][j];
				}
				else {
					MaxGrade[i][j] = max(MaxGrade[i-1][j],MaxGrade[i-1][j-time[i]]+grade[i]);
				}
			}
		}
		for (int i = 0;i < grade.length;i++) {
			for (int j = 0;j < TimeSum + 1;j++) {
				System.out.print(MaxGrade[i][j]+",");
			}
			System.out.println();
		}
		return MaxGrade[grade.length - 1][TimeSum];
	}
	
	public int max(int a,int b) {
		if (a>b) {
			return a;
		}
		else return b;
	}
	
	public static void main(String[] args) {
		int n = 5;
		int grade[] = {1,4,3,5,4};
		int time[] = {1,3,2,4,1};
		int TimeSum = 6;
		System.out.println(new DynamicProgrammingTest(n, grade, time, TimeSum).getMaxGrade());
	}
}


0
0
查看评论

Java趣味编程(一)

1_1 问题描述:根据福利彩票的规则,6个蓝色球,范围1--32,不允许重复,1个红色球,范围1-16,自动生存6个蓝色球,1个红色球。   import java.util.Arrays;    import java....
  • qq_20788055
  • qq_20788055
  • 2016-06-04 21:09
  • 1026

java算法之动态规划基本思想以及具体案例

一、基本概念     动态规划过程是:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生出来的,所以,这种多阶段最优化决策解决问题的过程就称为动态规划。 二、基本思想与策略     基本思想与分治法类似,...
  • likailonghaha
  • likailonghaha
  • 2016-12-10 22:23
  • 3845

深入Java中文问题及最优解决方法

由于Java编程中的中文问题是一个老生常谈的问题,在阅读了许多关于Java中文问题解决方法之后,结合作者的编程实践,我发现过去谈的许多方法都不能清晰地说明问题及解决问题,尤其是跨平台时的中文问题。于是我给出此篇文章,内容包括对控制台运行的class、Servelets、JSP及EJB类中的中文问题我...
  • daoquan
  • daoquan
  • 2005-09-07 13:16
  • 559

微软2017校招编程题 Composition(DP)

题目来源: https://hihocoder.com/contest/mstest2016oct/problem/2 描述 Alice writes an English composition with a length of N characters. However, her teacher...
  • hermito
  • hermito
  • 2016-10-14 10:36
  • 926

网易2018校招内推编程题(Python描述)

总结一下网易2018内推的测试题,我看python的比较少,所以献上自己的low代码,都AC过的,大毛病应该没有,看来基础还是得抓紧练习! [编程题] 彩色的砖块时间限制:1秒空间限制:32768K 小易有一些彩色的砖块。每种颜色由一个大写字母表示。各个颜色砖块看起来都完全一样。现在有一个给定的...
  • MrLevo520
  • MrLevo520
  • 2017-08-14 20:12
  • 1325

多叉树求最优解问题

阿里巴巴的ODPS大数据处理平台可以启动一系列并发的作业,每个作业中存在一系列存在父子关系的任务。每个任务用一个三元组表示–(任务id,父任务id,执行开销),其中任务id是一个正整数(>0);父任务id为0表示根任务,每个作业存在一个唯一的根任务,并且,所有的任务,如果其父任务id不为0,那...
  • ZTZY520
  • ZTZY520
  • 2017-07-05 11:56
  • 1128

蛮力法在求解最优解问题中的应用(JAVA)--旅行家问题、背包问题、分配问题

蛮力法在求解最优解问题中的应用 1、TSP(旅行商问题)要求我们找出一条n个给定城市之间的最短路径,使我们再回到出发的城市之前,对欧每个城市都只访问一次。我们可以用赋权图来描述这个问题,那么算法的目的就是求解一个图的最短哈密顿回路问题。 哈密顿回路同样可以定义为 其中第一个顶点和最后一...
  • qq_39630587
  • qq_39630587
  • 2018-02-04 10:31
  • 22

[编程题] 头条校招

头条的2017校招开始了!为了这次校招,我们组织了一个规模宏大的出题团队,每个出题人都出了一些有趣的题目,而我们现在想把这些题目组合成若干场考试出来,在选题之前,我们对题目进行了盲审,并定出了每道题的难度系统。一场考试包含3道开放性题目,假设他们的难度从小到大分别为a,b,c,我们希望这3道题能满足...
  • xll1314521
  • xll1314521
  • 2017-08-20 14:12
  • 305

网易2018校招编程题集合7

小易老师是非常严厉的,它会要求所有学生在进入教室前都排成一列,并且他要求学生按照身高不递减的顺序排列。有一次,n个学生在列队的时候,小易老师正好去卫生间了。学生们终于有机会反击了,于是学生们决定来一次疯狂的队列,他们定义一个队列的疯狂值为每对相邻排列学生身高差的绝对值总和。由于按照身高顺序排列的队列...
  • xiao_dondon
  • xiao_dondon
  • 2017-08-13 23:32
  • 742

剑指offer编程Java实现pdf——持续更新中...

声明:本文参照——剑指Offer——编程题的Java实现,并对一些算法进行优化,以下简称《参考》。 面试题11:数值的整数次方 题目大致为:     实现函数double power(double base, int exponent),求base的exponent次方。不...
  • happyaaaaaaaaaaa
  • happyaaaaaaaaaaa
  • 2017-08-01 19:49
  • 1210
    个人资料
    • 访问:1092次
    • 积分:101
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:3篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论