关闭

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

标签: java动态规划
50人阅读 评论(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
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

2014各大网络公司校招笔试算法题(收集并更新中)

从博客中整理,并不断的更新,供大家学习和交流,随后会给出部分算法题的参考代码。 腾讯   1、请设计一个排队系统,能够让每个进入队伍的用户都能看到自己在 中所处的位置和变化。队伍可能随时有人加入和退出,当有人退出影响到用户的位置排名时需要即时反馈到用户。 2...
  • u012138828
  • u012138828
  • 2014-08-25 13:35
  • 1250

今日头条2017秋季校招在线编程题解法参考

题目请移步到:http://blog.csdn.net/lzuacm/article/details/52699793 以下先写出我的解法 题目1: String Shifting import java.util.Iterator; import java.util.LinkedList; ...
  • hegan2010
  • hegan2010
  • 2016-09-30 22:34
  • 982

头条校招(今日头条2017秋招真题)

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

拼多多2018校招编程题

[编程题] 最大乘积 给定一个无序数组,包含正数、负数和0,要求从中找出3个数的乘积,使得乘积最大,要求时间复杂度:O(n),空间复杂度:O(1)  输入描述: 无序整数数组A[n] 输出描述: 满足条件的最大乘积 输入例子1: 3 4 1 2 输出例子1: ...
  • wuxiaosi808
  • wuxiaosi808
  • 2017-08-07 17:47
  • 1574

2016华为校招机试题(软件开发)

今天华为的机试题明显变难了,而且和往年的不一样了,准备了前些年的题目,但是今年的做起来很不习惯。机试时可以上网,但是搜不到原题。 这个是考试规则 初级题目:
  • qqyuanhao163
  • qqyuanhao163
  • 2015-09-21 10:47
  • 3152

华为2018届校园招聘笔试题目以及相应代码分享 软件开发岗位

华为2018届校园招聘笔试题目以及相应代码分享 软件开发岗位 这里第二题题目不全,有知道的朋友,可以补全一下。
  • lizi_stdio
  • lizi_stdio
  • 2017-08-03 14:47
  • 5862

2017年搜狗校招Java研发笔试编程题

最终收敛值 时间限制:C/C++语言 2000MS;其他语言 4000MS 内存限制:C/C++语言 65536KB;其他语言 589824KB 题目描述: 假设a[n]是一个有n个元素的整型数组,定义该数组上的一个操作f(a[n],r),f把a[n]按步长r映射到另外一个数组b[n],映射...
  • wyongan1128
  • wyongan1128
  • 2016-10-15 00:02
  • 567

【在线笔试题解题报告系列】网易2017校招内推笔试之编程题【持续更新】

网易今年把内推笔试放在牛客网上办,然后出了一批编程题。 题目在: http://www.nowcoder.com/test/2252286/summary http://www.nowcoder.com/test/2252291/summary 一共18个,好多(不同岗位抽3个不同的题的样子)…...
  • fcxxzux
  • fcxxzux
  • 2016-08-07 00:29
  • 10492

阿里巴巴2018校招编程测试题

阿里巴巴程序测试题,说实话第一眼看到这道题我感觉像是博弈论。30分钟的时间没有做出来,只能骗点分,证明我是会写java的··· 还是说正题吧···题目是这样的,A、B是两个无聊的人,他们决定玩个游戏:现在有一个非负整数组成的数组,A和B轮...
  • everyting_is_full
  • everyting_is_full
  • 2017-07-07 23:37
  • 707

阿里巴巴2017校招C++岗位在线编程题-求集合D的最大值,最小值和元素个数三者之和

题目:输入一组正整数为集合N;从N中任意取两个数求和得到集合A;从N任意取两个数求差的绝对值得到集合B;从集合A,B中各取一个数得到集合D;集合D中最大值d1,最小值d2,元素个数为ds,求d1+d2+ds; 思路:简单,按题目顺序来即可,注意集合元素的去重和排序即可。这题考的时候我有点粗心,一个循...
  • keaiyuzong
  • keaiyuzong
  • 2017-07-13 10:03
  • 408
    个人资料
    • 访问:909次
    • 积分:99
    • 等级:
    • 排名:千里之外
    • 原创:9篇
    • 转载:3篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论