1. 程式人生 > >演算法設計與分析: 4-1 會場安排問題

演算法設計與分析: 4-1 會場安排問題

4-1 會場安排問題

問題描述

假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計一個有效的貪心演算法進行安排。(這個問題實際上是著名的圖著色問題。若將每一個活動作為圖的一個 頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數,相應於要找的最小 會場數。)

對於給定的 k 個待安排的活動,程式設計計算使用最少會場的時間表。

資料輸入:
第一行有 1 個正整數 k,表示有 k 個待安排的活動。接下來的 k 行中,每行有 2 個正整數,分別表示 k 個待安排的活動開始時間和結束時間。時間以 0 點開始的分鐘計。

Java

import java.util.*;

public
class HuiChangAnPai { private static class Point implements Comparable{ int time; boolean isStartTime; public int compareTo(Object o) { Point point=(Point) o; int result = Integer.compare(time, point.time);//按 time 由小到大 排列 return result; } } private
static int n; private static List<Point> acts = new ArrayList<>(); public static void main(String[] args){ Scanner input = new Scanner(System.in); while (true){ acts.clear(); n = input.nextInt(); for(int i=1; i<2*n; i+=2){ Point p = new
Point(); Point q = new Point(); p.time = input.nextInt(); q.time = input.nextInt(); p.isStartTime = true; q.isStartTime = false; acts.add(p); acts.add(q); } Collections.sort(acts); int result = greedy(); System.out.println(result); } } private static int greedy(){ int curr = 0; int sum = 0; int m = acts.size(); for(int i=0; i<m-1; i++){ if(acts.get(i).isStartTime) curr++; else curr--; if((i==m-2||(acts.get(i).time<acts.get(i+1).time)) && curr>sum) sum = curr; } return sum; } }

Input & Output

5
1 23
12 28
25 35
27 80
36 50
3

Reference

王曉東《計算機演算法設計與分析》(第3版)P128

相關推薦

演算法設計分析: 4-1 會場安排問題

4-1 會場安排問題 問題描述 假設要在足夠多的會場裡安排一批活動,並希望使用盡可能少的會場。設計一個有效的貪心演算法進行安排。(這個問題實際上是著名的圖著色問題。若將每一個活動作為圖的一個 頂點,不相容活動間用邊相連。使相鄰頂點著有不同顏色的最小著色數

[演算法設計分析]4.1.2倒推法(猴子吃桃+一維陣列楊輝三角形+穿越沙漠)

#include<stdio.h> #include<iostream> using namespace std; void MonkeyPeach(); void Bino

演算法設計分析作業1

                             35. Search Insert Position Description: Given a sorted array and a target value, return the index if the ta

演算法設計分析1演算法概述

第1章 演算法概述(窮舉演算法) 重要人物:Alan Turing(圖靈機)、Donald Knuth(TEX系統) 演算法:解決問題的一種方法或一個過程 特性:有窮性(Finiteness)、確定性(Definiteness)、可行性(effectivenes

演算法設計分析: 4-27 登山機器人問題

4-27 登山機器人問題 問題描述 登山機器人是一個極富挑戰性的高技術密集型科學研究專案,它為研究發展多智慧體系統和多機器人之間的合作與對抗提供了生動的研究模型。 登山機器人可以攜帶有限的能量。在登山過程中,登山機器人需要消耗一定能量,連續攀登的路程越長

演算法設計分析: 4-21 區間相交問題

4-21 區間相交問題 問題描述 給定 x 軸上 n 個閉區間。去掉儘可能少的閉區間,使剩下的閉區間都不相交。 給定 n 個閉區間,程式設計計算去掉的最少閉區間數。 資料輸入: 第一行是正

計算機演算法設計分析1-4 金幣陣列問題

問題描述:有m*n枚金幣在桌面上排列成一個m行n列的金幣陣列。每一枚金幣或正面朝上,或背面朝上。用數字表示金幣狀態,0表示正面朝上,1表示背面朝上。 金幣陣列遊戲的規則是:     (1)每次將任一行金幣翻過來放在原來的位置上。     (2)每次可以任選2列,交換這2

《計算機演算法設計分析4版 (王曉東) 課後答案[1-9章]》pdf版電子書附下載連結+30個總結JVM虛擬機器的技術文排版好(收藏版)

技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

演算法設計分析基礎【第三版】習題1.1 4

演算法設計與分析基礎 習題1.1 4 設計一個[√n]的演算法,n是任意正整數。除了賦值和比較運算,該演算法只能用到基本的四則運算。 程式碼實現: #include "iostream" using namespace std; double n; doubl

演算法設計分析作業題】第二週:1. Two Sum

題目 C++ solution class Solution { public: vector<int> twoSum(vector<int>& nums, int target) { ve

演算法設計分析作業4

                                     100. Same Tree Description: Given two binary trees, write a function to check if they are the sam

計算機演算法設計分析學習筆記1

基本概念 程式 = 演算法 + 資料結構 演算法描述如何解決一類問題的一種方法,滿足如下性質: -輸入:一類問題的例項 - 輸出:針對例項的解 - 確定性:每條指令無歧義 - 有限性:有限迴圈 程式 不滿足有限性性質, eg. 作業系統為無限

計算機演算法設計分析課本(王曉東著)課後演算法實現題1-3 最多約數問題

問題描述: 正整數x的約數是能整除x的正整數。正整數x的約數個數記為div(x)。例如,1 2 5 10都是10的約數,且div(10)=4。設a和b是2個正整數,a<=b,找出a和b之間約數個數最多的數x。 演算法設計: 對於給定的2個正整數a<=b,計算a和b之間約數個數最多

演算法設計分析之入門篇(1.1演算法概述)——什麼是演算法

 我學習的視訊是網易雲平臺上的由王巨集志老師講的“演算法設計與分析”,這裡記錄學習筆記! 1.計算的定義   2.演算法的定義   3.問題的定義       問題是一種關係,下面這個例子中我們定義出一個我們常見的排序問題,之所以要弄出這種嚴格的定義是因為讓問題更嚴謹

《計算機演算法設計分析 第2版+第3版+第4版 (王曉東) 》原書附答案pdf版電子書附下載連結+30個總結JVM虛擬機器的技術文排版好(收藏版)

技術書閱讀方法論 一.速讀一遍(最好在1~2天內完成) 人的大腦記憶力有限,在一天內快速看完一本書會在大腦裡留下深刻印象,對於之後複習以及總結都會有特別好的作用。 對於每一章的知識,先閱讀標題,弄懂大概講的是什麼主題,再去快速看一遍,不懂也沒有關係,但是一定要在不懂的

演算法設計分析: 1-1 統計數字問題

1-1 統計數字問題 問題描述 一本書的頁碼從自然數1 開始順序編碼直到自然數n。書的頁碼按照通常的習慣編排, 每個頁碼都不含多餘的前導數字0。例如,第6 頁用數字6 表示,而不是06 或006 等。數 字計數問題要求對給定書的總頁碼n,計算出書的全

演算法設計分析: 5-37 n²-1謎問題

5-37 n²-1謎問題 問題描述 重排九宮是一個古老的單人智力遊戲。據說重排九宮起源於我國古時由三國演義故事“關羽義釋曹操”而設計的智力玩具“華容道”,後來流傳到歐洲,將人物變成數字。原始 的重排九宮問題是這樣的:將數字 1~8 按照任意次序排在 3×

演算法設計分析:第四章 動態規劃 4.2TSP之貨郎擔問題

/* 如果對於任意數目的n個城市,分別用1~n編 號,則這個問題歸結為在有向帶權圖中,尋找一 條路徑最短的哈密爾頓迴路問題。 這裡,V表示城市頂點,(i,j) ∈E 表示城市之 間的距離,用鄰接矩陣C表示城市之間的距離。 思想: 1設d(i,V-{i})表示從頂點i出發

0-1揹包問題的多種演算法設計分析

0-1揹包問題的多種演算法設計與分析 0-1揹包問題描述:給定一組共n個物品,每種物品都有自己的重量wi(i=1~n)和價值vi(i=1~n),在限定的總重量(揹包的容量C)內,如何選擇才能使得選擇物品的總價值之和最高。選擇最優的物品子集放置於給定揹包中,最優子集對應n元解

演算法設計分析——動態規劃(一)矩陣連乘

動態規劃——Dynamic programming,可以說是本人一直沒有啃下的骨頭,這次我就得好好來學學Dynamic programming. OK,出發! 動態規劃通常是分治演算法的一種特殊情況,它一般用於最優化問題,如果這些問題能夠: 1.能夠分解為規模更小的子問題 2.遞迴的