1. 程式人生 > >2015百度校招之動態規劃(兼職問題)

2015百度校招之動態規劃(兼職問題)

晚上做完百度校招筆試題,真心覺得不再愛了,第一題圖片沒刷出來,第二題一看就有思路,結果花了20多分鐘寫程式碼,可竟然半個多小時除錯,還做錯了,第三題也是很簡單。因為前面的網站高併發導致的各種刷不出圖問題,很是影響手感。不吐槽了,動態規劃問題,只是這裡比普通的動態規劃多了層包裝。第二題截圖如下:

交完卷很不爽,明明可以輕鬆搞定的題,結果還耽誤了另外兩道題的答題時間,唉,都怪自己太倔。好吧,不吐槽了,下面貼出交卷後完善的程式碼:

import java.util.Scanner;

public class Main1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub

		Scanner scan = new Scanner(System.in);
		String[] num = scan.nextLine().split("\\s");///n,m,K
		int n = Integer.valueOf(num[0]);
		int m = Integer.valueOf(num[1]);
		int k = Integer.valueOf(num[2]);
		int[] c = new int[n];
		int[] v = new int[n];
		int[] p = new int[n];
		String []  pdata = scan.nextLine().split("\\s");
		int temp = n;
		while(temp>0){
			p[temp-1] = Integer.valueOf(pdata[temp-1]);
			temp--;
		}
		////根據m個時間段重新構造獲取的報酬陣列
		for(int i=0;i<n;i++){
			int sum = 0;
			for(int j=0;j<m&&i>=j;j++){///將i前m個報酬相加
				sum+=p[i-j];
			}
			v[i] = sum;
			c[i] = 1;//消耗體力
		}
		
		System.out.println(dp(k, m, c, v));
		
	}
	/**
	 * 動態規劃獲取單組資料的最大價值
	 * @param k 體力
	 * @param m 連續工作間隔
	 * @param c   工作時間段
	 * @param v   獲得的報酬
	 * @return
	 */
	public static int dp(int k, int m,int[] c, int[] v){
		int[][] dp = new int[c.length][k+1];/////dp[i][j]表示在在體力為j時,選擇前面i個所得最大報酬
		for(int i=0;i<c.length;i++) {
			dp[i][0] = 0;
		}
		for(int j=0;j<k;j++){
			dp[0][j] = 0;
		}
		
		for(int i=0;i<c.length;i++){
			for(int j=0;j<=k;j++){
				if(c[i]>j){///不工作
					dp[i][j] = i==0? 0 : dp[i-1][j]; 
				}else{///工作
					if(i<m){///前m個時間段
//						for(int x=0;x<i+1;x++)
							dp[i][j] =v[i]; 
					}else{
						dp[i][j] = Math.max(dp[i-1][j], dp[i-m][j-1]+v[i]);
					}
					
				}	
			}
		}
		if(k<1||c.length<1) return 0;
		return dp[c.length-1][k];
	}
}

測試:


其實,你說難嗎?真不難! 第一次搞動態規劃,主要還是自己能畫圖一步步推導(http://blog.csdn.net/dapengbusi/article/details/7463968關聯文章中的那個圖,會畫了就okay了!),掌握了,這方法還是很強大的!好吧,筆試又掛了 0.0

相關推薦

2015動態規劃兼職問題

晚上做完百度校招筆試題,真心覺得不再愛了,第一題圖片沒刷出來,第二題一看就有思路,結果花了20多分鐘寫程式碼,可竟然半個多小時除錯,還做錯了,第三題也是很簡單。因為前面的網站高併發導致的各種刷不出圖問題,很是影響手感。不吐槽了,動態規劃問題,只是這裡比普通的動態規劃多了層包

2015筆試杭州站

1:請描述資料結構中棧和佇列的區別。並說出3個操作。 答:棧先進後出。佇列先進先出。例如(pop() push() empty() back() front()); 2:請描述一下C++中多型。舉個例子: 我學java的。但我記得多型應該是過載和重寫。 過載 Class

Leetcode題解動態規劃4最大子序和打家劫舍

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/57/ 題目描述: 打家劫舍 你是一個專業的小偷,計劃偷竊沿街的房屋。每間房內都藏有

Leetcode題解動態規劃3最大子序和

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/56/ 題目描述:   最大子序和 給定一個整數陣列 

Leetcode題解動態規劃2 買賣股票的最佳時機

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/55/ 題目描述: 給定一個數組,它的第 i 個元素是一支給定股票第

Leetcode題解動態規劃1爬樓梯

題目:https://leetcode-cn.com/explore/interview/card/top-interview-questions-easy/23/dynamic-programming/54/ 題目描述: 假設你正在爬樓梯。需要 n 階你才能到達樓頂。

由Leetcode詳解演算法 動態規劃DP

因為最近一段時間接觸了一些Leetcode上的題目,發現許多題目的解題思路相似,從中其實可以瞭解某類演算法的一些應用場景。 這個隨筆系列就是我嘗試的分析總結,希望也能給大家一些啟發。 動態規劃的基本概念 一言以蔽之,動態規劃就是將大問題分成小問題,以迭代的方式求解。 可以使用動態規劃求解的問題

演算法總結動態規劃DP

適用動態規劃的特點 所解決的問題是最優化問題。 所解決的問題具有“最優子結構”。可以建立一個遞推關係,使得n階段的問題,可以通過幾個k<n階段的低階子問題的最優解來求解。 具有“重疊子結構”的特點。即,求解低階子問題時存在重複計算。 詞典法 大家都知道,遞迴演算法一般都存在大量的重複計算,這會造成不

演算法動態規劃DP

前言 前言_ 我們遇到的問題中,有很大一部分可以用動態規劃(簡稱DP)來解。 解決這類問題可以很大地提升你的能力與技巧,我會試著幫助你理解如何使用DP來解題。 這篇文章是基於例項展開來講的,因為乾巴巴的理論實在不好理解。 注意:如果你對於其中某一節已經瞭解並且不

【演算法動態規劃動態規劃DP詳解

一、基本概念 動態規劃(dynamic programming)是運籌學的一個分支,是求解決策過程(decision process)最優化的數學方法。20世紀50年代初美國數學家R.E.Bellman等人在研究多階段決策過程(multistep d

LeetCode :騰訊秋動態規劃

https://leetcode-cn.com/explore/interview/card/tencent/226/dynamic-programming/  爬樓梯 假設你正在爬樓梯。需要 n 階你才能到達樓頂。 每次你可以爬 1 或 2 個臺階。你有多少種不

2018-10-13 測試面試

一面: 1、自我介紹: 2、專案: Token的實現方式:通過什麼來做唯一標識生成Token的? 答:裝置的硬體型號; 問:如果別人正好偽造了該硬體型號,進行獲取Token,你是怎麼解決的? 答:沒有解決方案; 3、sizeof(型別是指標)和sizeof(型別

2018、騰訊 面試經驗

百度校招面試經驗   一到九月份,就開始了各種筆試。每天晚上七點到九點,大家都可以在機房看到我一個人在那裡自言自語。2018年09月16號晚上,我和我女朋友筆試完在外面吃東西時接到百度的面試通知。接

難忘的面試周——面經

如果說準備招聘的複習過程如同準備考研一樣單調而緊張,那筆試之後的面試過程就如沒考上尋求調劑一般煎熬而痛苦。也許很多朋友沒有體會過以上過程,還不能理解如何緊張如何煎熬。那麼下面我把我一個月的緊張和一週的煎熬分享給大家,文章末尾會有一片android面試大全,這些只

面試總結——二面跪了

開篇:無論有多少磕磕絆絆,無論每一次摔得有多痛,請給自己留下記憶! 北漂近半年,由於個人原因錯過很多校招,百度是第一家通知我面試的,心中難免欣喜萬分,畢竟自己的運氣還不差。 面試時間:2017年10月14日上午10:00 面試地點:百度大廈C座(上地十街1

2017年 《資料探勘工程師》筆試題---程式題

一,程式題 1,餐廳裡有一張圓形的桌子,桌子上有n個座位,座位按照順序從1到n編號,而且n號座位和1號座位相鄰,每個座位都不一樣。m個人一起去這家餐廳吃飯,為了更好地就餐,他們不想坐得太過擁擠,因此,不允許有任意兩個相鄰。 您知道一共有多少種不同的就坐方法嗎

2017筆試第一題

題意: 大概是一個小朋友去遊樂園,遊樂園一個有n個專案,第i專案需要花費a[i]時間去玩,小朋友的門票一共可以在遊樂園裡面待t時間,只要在這個時間內開始一個專案,那麼他可以等到專案結束後才離開遊樂園。

-等待的那些日子裡

百度一面2013年10月11日下午5:00 天津晉濱國際大酒店 有幸通過了對我來說很有挑戰性的百度筆試,迎接來了度孃的一面,約的下午5:00,4:50我來到了一面面試官所在房間的門口(1220),門大開著,裡面有個哥們正在面試,就沒打擾,在門口老實等著,等到5:30他們才結

160922-0924測試開發面試記錄

160922 0924 0926百度校招測試開發面試記錄 首先我要吐槽一下面試時間,一面面了一個小時,二面面了70+分鐘。。 總的看來,面試演算法問的不難,但是很注重考查基礎,必問專案經歷,並會發散性的考查你的能力,同時一定會考查對你投遞崗位的認識程度。

地圖和openlayers融合封裝demo展示

2018.5.28 --11:31 wmap的目的是減少地圖開發的成本和時間。  如果你需要進行地圖開發,覺的百度地圖和openlayers的api文件晦澀難懂(主要是openlayers的api很難懂,百度api入門很簡單),可以使用wmap。你不需要去學習百度地圖api