0-1背包問題(物品不可分割)

問題背景:

所謂“鐘點秘書”,是指年輕白領女性利用工余時間為客戶提供秘書服務,并按鐘點收取酬金。“鐘點秘書”為客戶提供有償服務的方式一般是:采用電話、電傳、上網等“遙控”式
服務,或親自到客戶公司處理部分業務。其服務對象主要有三類:一是外地前來考察商務經營、項目投資的商人或政要人員,他們由于初來乍到,急需有經驗和熟悉本地情況的秘書幫忙;二是前來開展短暫商務活動,或召開小型資訊發布會的國外客商;三是本地一些請不起長期秘書的企、事業單位。這些客戶普遍認為:請“鐘點秘書”,一則可免去專門租樓請人的大筆開銷;二則可根據開展的商務活動請有某方面專長的可用人才;三則由于對方是臨時雇用關系,工作效率往往比固定的秘書更高。據調查,在上海“鐘點秘書”的行情日趨看好。對此,業內人士認為:為了便于管理,各大城市有必要組建若干家“鐘點秘書服務公司”,通過會員制的形式,為眾多客戶提供規范、優良、全面的服務,這也是建設國際化大都市所必需的。某跨國公司總裁正分身無術,為一大堆會議時間表焦頭爛額,希望高級鐘點秘書能做出合理的安排,能在有限的時間內召開更多的會議。

問題分析:

這是一個典型的會議安排問題,會議安排的目的是能在有限的時間內召開更多的會議
(任何兩個會議不能同時進行)。在會議安排中,每個會議 i 都有起始時間 bi 和結束時間 ei,且 bi<ei,即一個會議進行的時間為半開區間[bi,ei)。如果[bi,ei)與[bj,ej)均在“有限的時間內”,且不相交,則稱會議 i 與會議 j 相容的。也就是說,當 bi≥ej 或 bj≥ei 時,會議 i與會議 j 相容。會議安排問題要求在所給的會議集合中選出最大的相容活動子集,即盡可能在有限的時間內召開更多的會議。在這個問題中,“有限的時間內(這段時間應該是連續的)”是其中的一個限制條件,也應該是有一個起始時間和一個結束時間(簡單化,起始時間可以是會議最早開始的時間,結束時間可以是會議最晚結束的時間),任務就是實現召開更多的滿足在這個“有限的時間內”等待安排的會議。

算法設計:

(1)初始化:將 n 個會議的開始時間、結束時間存放在結構體數組中(想一想,為什么
不用兩個一維數組分別存儲?),如果需要知道選中了哪些會議,還需要在結構體中增加會議編號,然后按結束時間從小到大排序(非遞減),結束時間相等時,按開始時間從大到小排序(非遞增);
(2)根據貪心策略就是選擇第一個具有最早結束時間的會議,用 last 記錄剛選中會議的
結束時間;
(3)選擇第一個會議之后,依次從剩下未安排的會議中選擇,如果會議 i 開始時間大于
等于最后一個選中的會議的結束時間 last,那么會議 i 與已選中的會議相容,可以安排,更新 last 為剛選中會議的結束時間;否則,舍棄會議 i,檢查下一個會議是否可以安排。

通俗講:先將數據存到結構體中,用結束時間從小到大排序(若結束時間相同,以開始時間由大到小排序),之后再次基礎上再判斷開始時間;在會議按結束時間非遞減排序的基礎上,首先選中第一個會議,用 last 變量記錄剛剛被選中會議的結束時間。下一個會議的開始時間與 last 比較,如果大于等于 last,則選中。每次選中一個會議,更新 last 為最后一個被選中會議的結束時間,被選中的會議數counter加 1;如果會議的開始時間不大于等于 last,繼續考查下一個會議,直到所有會議考查完畢。最后返回counter即可;

樣例輸入:

10//10個會議
3 6 //開始時間 結束時間
1 4
5 7
2 5
5 9
3 8
8 11
6 10
8 12
12 14

樣例輸出:

4

代碼如下:

#include <iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;struct meet{//用結構體存儲會議int begin1;//會議開始時間int end1;//輝夜結束時間int number;//會議編號
}a[1014];bool beyond(meet a,meet b){//按結束時間由早到晚排序if(a.end1 == b.end1) return a.begin1>b.begin1;//若結束時間相同,會議開始時間由晚到早排序return a.end1<b.end1;
}int main()
{int all;//總會議數int last;int counter=1;scanf("%d",&all);for(int i=0;i<all;i++){scanf("%d",&a[i].begin1);scanf("%d",&a[i].end1);a[i].number = i+1;//會議編號}sort(a,a+all,beyond);//會議結束時間由早到晚排序last = a[0].end1;//這里的last為結束最早的會議結束時間for(int j=1;j<all;j++){if(a[j].begin1 >= last){//然后找另一個比這個會議結束時間大的開始時間的會議counter ++;last = a[j].end1;}}printf("%d",counter);return 0;
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/379567.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/379567.shtml
英文地址,請注明出處:http://en.pswp.cn/news/379567.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

算法---KMP算法

字符串1 KMP算法狀態機概述構建狀態轉移1 KMP算法 原文鏈接&#xff1a;https://zhuanlan.zhihu.com/p/83334559 先約定&#xff0c;本文用pat表示模式串&#xff0c;長度為M&#xff0c;txt表示文本串&#xff0c;長度為N&#xff0c;KMP算法是在txt中查找子串pat&#xff0…

cache初接觸,并利用了DataView

我們在寫代碼的時候,如果數據控件要獲得數據,一般方法,Conn.Open();OleDbCommand cmd;cmd new OleDbCommand(sql, Conn);GridView1.DataSource dbcenter.accessGetDataSet(sql);GridView1.DataBind();Conn.close();但如果多個數據控件要綁定數據,則比較頻繁打開數據庫,效率一…

Java ByteArrayInputStream reset()方法及示例

ByteArrayInputStream類reset()方法 (ByteArrayInputStream Class reset() method) reset() method is available in java.util package. reset()方法在java.util包中可用。 reset() method is used to reset this ByteArrayInputStream to the last time marked position and …

回文數猜想

問題描述&#xff1a; 一個正整數&#xff0c;如果從左向右讀&#xff08;稱之為正序數&#xff09;和從右向左讀&#xff08;稱之為倒序數&#xff09;是一樣的&#xff0c;這樣的數就叫回文數。任取一個正整數&#xff0c;如果不是回文數&#xff0c;將該數與他的倒序數相加…

文件上傳 帶進度條(多種風格)

文件上傳 帶進度條 多種風格 非常漂亮&#xff01; 友好的提示 以及上傳驗證&#xff01; 部分代碼&#xff1a; <form id"form1" runat"server"><asp:ScriptManager ID"scriptManager" runat"server" EnablePageMethods&quo…

同步---自旋鎖

1 自旋鎖的基本概念 自旋鎖最多只能被一個可執行線程持有&#xff0c;如果一個執行線程試圖獲得一個已經被使用的自旋鎖&#xff0c;那么該線程就會一直進行自旋&#xff0c;等待鎖重新可用。在任何時刻&#xff0c;自旋鎖都可以防止多余一個的執行線程同時進入臨界區。 Linu…

實習日志----4.播放時段參數設置

由于客戶在下發廣告時&#xff0c;一則廣告可在多個時段播放&#xff0c;這就需要設置多個播放時段的參數。 但在這種情況下&#xff0c;我并不知道用戶每次需要下發幾個時段&#xff0c;所以前臺不能設定死。 因此我要實現這么一個功能&#xff0c;讓用戶根據自己的需要來動態…

線性插值算法實現圖像_C程序實現插值搜索算法

線性插值算法實現圖像Problem: 問題&#xff1a; We are given an array arr[] with n elements and an element x to be searched amongst the elements of the array. 給定一個數組arr []&#xff0c;其中包含n個元素和一個要在該數組的元素中搜索的元素x 。 Solution: 解&…

hdu 1197

地址&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1197 題意&#xff1a;求一個數轉換成10&#xff0c;12&#xff0c;16進制后各個位上的數的和是否相等。 mark&#xff1a;模擬進制轉換。 代碼&#xff1a; #include <stdio.h>int zh(int a, int n) {int su…

linux系統編程---線程總結

線程總結1 線程的實現線程創建線程退出線程等待線程清理2 線程的屬性線程的分離線程的棧地址線程棧大小線程的調度策略線程優先級3 線程的同步互斥鎖讀寫鎖條件變量信號量線程是系統獨立調度和分配的基本單位。同一進程中的多個線程將共享該進程中的全部系統資源&#xff0c;例…

博客上一些項目相關源碼鏈接

GitHub&#xff1a;https://github.com/beyondyanyu/Sayingyy

重新開啟Ctrl+Alt+Backspace快捷鍵

UBUNTU老用戶知道CtrlAltBackspace這個快捷鍵是用來快速重啟X的在9.04中被默認關閉了&#xff0c;那如何來打開它呢&#xff1f;在終端中輸入&#xff1a;sudo gedit /etc/X11/xorg.conf在其中加入&#xff1a;Section “ServerFlags”Option “DontZap” “false”EndSection退…

Java LocalDate類| 帶示例的getDayOfYear()方法

LocalDate類的getDayOfYear()方法 (LocalDate Class getDayOfYear() method) getDayOfYear() method is available in java.time package. getDayOfYear()方法在java.time包中可用。 getDayOfYear() method is used to get the day-of-year field value of this LocalDate obje…

火腿三明治定理

定理&#xff1a;任意給定一個火腿三明治&#xff0c;總有一刀能把它切開&#xff0c;使得火腿、奶酪和面包片恰好都被分成兩等份。 而且更有趣的是&#xff0c;這個定理的名字真的就叫做“火腿三明治定理”&#xff08;ham sandwich theorem&#xff09;。它是由數學家亞瑟?斯…

如何給Linux操作系統(CentOS 7為例)云服務器配置環境等一系列東西

1.首先&#xff0c;你得去購買一個云服務器&#xff08;這里以阿里云學生服務器為例&#xff0c;學生必須實名認證&#xff09; 打開阿里云&#xff0c;搜索學生服務器點擊進入即可 公網ip為連接云服務器的主機 自定義密碼為連接云服務器是需要輸入的密碼 購買即可 點擊云服…

Linux系統編程---I/O多路復用

文章目錄1 什么是IO多路復用2 解決什么問題說在前面I/O模型阻塞I/O非阻塞I/OIO多路復用信號驅動IO異步IO3 目前有哪些IO多路復用的方案解決方案總覽常見軟件的IO多路復用方案4 具體怎么用selectpollepolllevel-triggered and edge-triggered狀態變化通知(edge-triggered)模式下…

[轉帖]純屬娛樂——變形金剛vs天網

[轉帖]變形金剛2的影評-《變形金剛3 天網反擊戰》有一個問題困擾了我足足二十年&#xff1a;為什么汽車人要幫地球人&#xff1f;光用“所有有感知的生物都應享有自由”這個法則是根本說不過去的&#xff0c;因為豬也有感知&#xff0c;但人類就把豬圈養起來&#xff0c;隨意殺…

c#中textbox屬性_C#.Net中的TextBox.MaxLength屬性與示例

c#中textbox屬性Here we are demonstrating use of MaxLength property of TextBox. 在這里&#xff0c;我們演示了TextBox的MaxLength屬性的使用。 MaxLength property of TextBox is used to set maximum number of character that we can input into a TextBox. Limit of M…

IIS7 MVC網站生成、發布

(1)生成。 確保System.Web.Mvc.dll在bin目錄下 (2)發布網站到文件系統 (3)在IIS中為網站添加應用程序池&#xff08;一個虛擬目錄&#xff0c;一個應用程序池&#xff09; (4)添加在默認網站下添加虛擬目錄 &#xff08;5&#xff09;轉換為應用程序 至此&#xff0c;部署完畢 …

標題:明碼

轉載&#xff1a;https://blog.csdn.net/u011747888/article/details/79781040 標題&#xff1a;明碼 漢字的字形存在于字庫中&#xff0c;即便在今天&#xff0c;16點陣的字庫也仍然使用廣泛。 16點陣的字庫把每個漢字看成是16x16個像素信息。并把這些信息記錄在字節中。 一…