1. 程式人生 > >貪心演算法——活動安排

貪心演算法——活動安排

問題描述:活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單、漂亮的方法使得儘可能多的活動能相容地使用公共資源。

思路:先將活動按結束時間非遞減進行排序,然後每一次貪心選擇滿足條件的最小結束時間的活動

程式碼如下:(java實現)

import java.util.Scanner;
public class ActivityArrange {
	static int count;
	/**
	 * 貪心演算法,每次取滿足要求且結束時間最小的活動
	 */
	static void greedselector(int [][]a,int n){
		boolean []b=new boolean[n];//存放被選中的活動
		b[0]=true;
		int j=0;
		for(int i=j+1;i<n;i++){
				if(a[i][0]>=a[j][1]){
					b[i]=true;
					j=i;
				}
		}
		for(int i=0;i<b.length;i++){
			if(b[i]){
				count++;
			}
		}
		System.out.println("最多活動數:"+count);
		System.out.println("這些活動有(其中一種情況):");
		for(int i=0;i<b.length;i++){
			if(b[i]){
				System.out.println("("+a[i][0]+","+a[i][1]+")");
			}
		}
	}
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int n=input.nextInt();//總共活動數
		int [][]a=new int[n][2];//二維陣列表示每一個活動的開始時間與結束時間
		for(int i=0;i<n;i++){
			a[i][0]=input.nextInt();
			a[i][1]=input.nextInt();
		}
		//使用簡單選擇排序,按結束時間非遞減排列
		for(int i=0;i<n-1;i++){
			for(int j=i+1;j<n;j++){
				if(a[j][1]<a[i][1]){
					int t=a[j][1];
					a[j][1]=a[i][1];
					a[i][1]=t;
					int m=a[j][0];
					a[j][0]=a[i][0];
					a[i][0]=m;
				}
			}
		}
		greedselector(a,n);
	}
}


相關推薦

貪心演算法-活動安排問題

對於活動安排問題,該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單漂亮的方法,使盡可能多的安排活動能相容的使用公共資源。 貪心演算法不能總是得到整體問題的最優解,但對於活動安排問題,貪心演算法卻總能得到整體的最優解。 可以將所有活動的開始時間、終止時間以及

貪心演算法——活動安排

問題描述:活動安排問題就是要在所給的活動集合中選出最大的相容活動子集合,是可以用貪心演算法有效求解的很好例子。該問題要求高效地安排一系列爭用某一公共資源的活動。貪心演算法提供了一個簡單、漂亮的方法使得

(基於Java)演算法貪心演算法——活動安排問題

貪心演算法(Greedy Algorithm):又名貪婪演算法。貪心演算法是指,在對問題求解時,總是做出在當期看來是最好的選擇。也就是說,貪心演算法能決定出最好的下一步,它不是從整體最優上考慮,而僅僅是在某種意義上的區域性最優解。 值得注意的是:在某些問題上,用貪心演算法

hdu2037今年暑假不AC(貪心活動安排問題)

今年暑假不AC Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 15   Accepte

貪心演算法——任務安排

給定一臺有m個儲存空間的單程序機器; 現有n個 請求:第i個請求計算時需要佔用R[i]個空間,計算完成後,儲存計算結果需要佔用O[i]個空間(其中O[i]<R[i])。問如何安排 這n個請求的順序,使得所有請求都能完成。 如:m=14,n=2,R[1,2]=[10

貪心演算法-會場安排問題

貪心演算法特徵:1:貪心選擇性質;2:最優子結構:('動態規劃'),具體依情況而定。貪心演算法性質:  雖不能對所有問題都能得到整體最優解,但是對於範圍較廣的許多問題得到其整體最優解。如‘単源最短路徑', '最小生成樹' 等。貪心演算法是對許多整體最優解的近似解。貪心演算法思

貪心(一)——活動安排問題

時間 mst font 行高 規模 ont str ron 不變   求最優解的問題可看作是通過一系列步驟,每一步有一選擇的集合,對於較簡單的問題,動態規劃顯得過於復雜,可用較簡單有效的算法求解之,如貪心。貪心算法總是在當前步驟上選取最好的方案,即它是一種局部最優的選擇,

貪心演算法(1)—— 活動安排問題 以及 電視節目問題 的區別

一、活動安排問題 #include <iostream> #include <algorithm> using namespace std; /* 題目型別:活動安排問題 特點:所有活動都需要進行,要求輸出所需的會場數 演算法:貪心演算法 注意

【NOJ1205】【貪心演算法活動安排

1205.活動安排 時限:1000ms 記憶體限制:10000K  總時限:3000ms 描述 Jack是一名nwpu的大一新生,對學校舉辦的各種活動都十分的好奇,想盡可能多的參加這些活動。Npwu每天共有N項活動,其開始結束時間分別為B[i],E[i],(i = 1,

貪心演算法活動安排問題

問題描述: 現在給你一個會場,有許社團需要在這個會場上活動, 已知各個社團在這個會場上活動的時間(起始時間和終止時間) 要求出來怎麼安排 能夠使得這個教室z在這一天之內接待儘可能多的社團  解題思路與演算法思想 已經知道我們有n個活動需要安排 不妨考

9.29-貪心演算法(//活動安排//0-1揹包//裝載問題)

1.活動安排 描述:Jack是一名nwpu的大一新生,對學校舉辦的各種活動都十分的好奇,想盡可能多的參加這些活動。Npwu每天共有N項活動,其開始結束時間分別為B[i],E[i],(i = 1,2,……N) 請問Jack一天最多能參加幾項活動。當然,Jack在同一時間內只能

0021演算法筆記——【貪心演算法貪心演算法活動安排問題

 1、貪心演算法 (1)原理:在對問題求解時,總是做出在當前看來是最好的選擇。也就是說,不從整體最優上加以考慮,他所做出的僅是在某種意義上的區域性最優解。貪心演算法不是對所有問題都能得到整體最優解,但對範圍相當廣泛的許多問題他能產生整體最優解或者是整體最優解的近似解。

活動安排貪心演算法

貪心演算法總是做出在當前看來是最好的選擇。但貪心演算法並不從整體最優加以考慮,它所做出的選擇只是在某種意義上的區域性最優選擇。但其最終結果能達到預期目的,或者是最優解的近似解。 活動安排是貪心演算法的

[貪心]活動安排問題2

時間 不能 using air 結束 lag rst color log 題目大意:有若幹個活動,第i個開始時間和結束時間是[Si,fi),同一個教室安排的活動之間不能交疊,求要安排所有活動,最少需要幾個教室? 解題關鍵:策略: 按照開始時間排序優先安排活動,如果沖突,則

[C++] 貪心算法之活動安排、背包問題

基本思想 nbsp 考慮問題 最終 jpg 實例 使用 n) 最好的 一、貪心算法的基本思想   在求解過程中,依據某種貪心標準,從問題的初始狀態出發,直接去求每一步的最優解,通過若幹次的貪心選擇,最終得出整個問題的最優解。   從貪心算法的定義可以看出,貪心算法不是從整體

活動安排問題(貪心

com back cnblogs iostream truct .com highlight struct 問題 題目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1428 先按開始時間排序,可

活動選擇問題_貪心演算法

貪心演算法 對於許多最優化問題,使用動態規劃演算法來求最優解有些殺雞用牛刀了,可以使用更加簡單、更加高效的演算法。貪心演算法就是這樣的演算法,它在每一步做出當時看起來最佳的選擇。也就是說它總是做出區域性最優的選擇,從而得到全域性最優解。   對於某些問題並不保證得到最優解,

貪心-活動安排問題

顧名思義,貪心演算法總是做出當前看來最好的選擇。也就是說貪心演算法並不從整體最優考慮,它所做的選擇只是在某種意義上的區域性最優選擇。 當然,希望貪心演算法得到的最終結果也是整體最優解。 雖然貪心演算法不能對所有問題都得到整體最優解,但對許多問題它能產生整體最優解。 在一些情況下,即使

【杭電100題】【貪心】2037 今年暑假不AC(活動安排問題)

今年暑假不AC Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 77466 &nbs

會場安排問題(貪心演算法) Comparator類排序的學習

主要是學習類如何進行排序利用  arrays  嗯 還有反正就是陣列排序的學習 程式碼: import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.PrintS