Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 间隔调度算法或活动选择算法_Php_Algorithm_Logic_Maximum Profit Problem - Fatal编程技术网

Php 间隔调度算法或活动选择算法

Php 间隔调度算法或活动选择算法,php,algorithm,logic,maximum-profit-problem,Php,Algorithm,Logic,Maximum Profit Problem,我为这个问题挣扎了这么久 有n个人想要在旅馆里住同一个房间。每个人都想在自己方便的时候入住酒店,但一次只能住一个人。假设房间从早上5点到晚上11点都有空。酒店经理从每个入住该房间的人身上收取500卢比。一个人在那个房间里呆多久并不重要。我们必须使经理的利润最大化。假设n=4,即四个人想要同一个房间。假设第一个人的房间从早上6点到早上8点,第二个人的房间从早上7点到早上8点,第三个人的房间从早上8点到下午12点,第四个人的房间从上午11点到下午1点 通过观察上图,我们可以很容易地看到,经理最多只

我为这个问题挣扎了这么久

有n个人想要在旅馆里住同一个房间。每个人都想在自己方便的时候入住酒店,但一次只能住一个人。假设房间从早上5点到晚上11点都有空。酒店经理从每个入住该房间的人身上收取500卢比。一个人在那个房间里呆多久并不重要。我们必须使经理的利润最大化。假设n=4,即四个人想要同一个房间。假设第一个人的房间从早上6点到早上8点,第二个人的房间从早上7点到早上8点,第三个人的房间从早上8点到下午12点,第四个人的房间从上午11点到下午1点

通过观察上图,我们可以很容易地看到,经理最多只能允许两个人留下(第一和第三或第一和第四或第二和第三或第二和第四)。所以他能得到的最大利润是500+500=1000卢比。因此,我们必须实现一个能够找到最大利润值的算法。假设这些人只想在早上5点到晚上11点之间入住,每个人都想在几个小时内入住

输入说明:

{#,#

输出说明:

产量应为最大利润值。
就问题中考虑的例子而言,产出为2000

示例:

输入:
{6AM#8AM,11AM#1PM,7AM#3PM,7AM#10AM#12PM,2PM#4PM,1PM#4PM,8AM#9AM}

输出:
2000年

这是


可以通过按结束时间对时间间隔进行排序,并首先选择最早的截止日期,删除所有重叠的时间间隔并重复来解决此问题。

看起来像是活动选择问题的一种变体


请阅读此文章以获得极好的解释。

以下是您问题的确切答案:

<?php

// Timezone set
date_default_timezone_set("Asia/Kolkata");

// User - i/p
$input = "{6AM#8AM,11AM#1PM,7AM#3PM,7AM#10AM,10AM#12PM,2PM#4PM,1PM#4PM,8AM#9AM}";


// Processing i/p string to ARRAY

$input_array = [];  // Array given as i/p to "calculateprofit"-function
$processed_array = (explode(',', substr($input, 1, -1)));

foreach ($processed_array as $key => $value)
    $input_array[] = explode("#", $value);



// Function call and display o/p
$maximim_profit = calculateprofit($input_array);
echo "<strong>Input</strong> = ".$input;
echo "<br/><br/><strong>Maximum Profit</strong> = ".$maximim_profit;


// Function to calculate - Maximum Profit
function calculateprofit($input){
    $room_charges = 500;
    $members_covered = [$input[0]];
    $last_member = 0;


    $finishing_time = array();

    foreach ($input as $key => $row)
        $finishing_time[$key] = date("H:i", strtotime($row[1]));

    array_multisort($finishing_time, SORT_ASC, $input);


    for($i=1; $i<sizeof($input); $i++){
        $current_coustmer = $input[$i];

        if(date("H:i", strtotime($current_coustmer[0])) >= date("H:i", strtotime($input[$last_member][1])) ){
            $members_covered[] = $input[$i];
            $last_member = $i;  
        }

    }

    //  print_r($members_covered);

    return sizeof($members_covered)*$room_charges;
}

?>


取消
一次只能住一个人的限制条件
称之为旅馆,应该没问题。谢谢你的帮助。这个链接很有魅力D