Sicily 1733. Berth Allocation

1733. Berth Allocation

Constraints

Time Limit: 5 secs, Memory Limit: 32 MB

Description

Singapore port is one of the busiest ports in the world. In 1994, Singapore maintained its position as the world’s busiest port in terms of shipping tonnage of ship arrivals. In that year, there were 101,107 ship arrivals with shipping tonnage of 678. 6 million gross tons. One of the planning problems encountered at the port is to decide whether a given set of ships can be berthed in a section of the port with certain berthing constraints. 
The port is divided into m sections and no ship can be berthed across a section. Ships arrive at the port at different times to be berthed. Every ship has an expected duration of stay which may be different from another ship. You can berth a ship or not when it arrives. To berth a ship is to place the ship along the wharf line of a section. Once a ship is berthed, it will not be moved until its departure, that is, if two ships are in the same section and have a time overlap, they cannot share any part of the section. What’s more, the berthing of the ships cannot exceed the capacity of the section. 
To simplify the problem, we just consider the section as a rectangle with a length of L hundred meters and a width of W hundred meters, and all the ships are rectangles with a length of one hundred meters and a width of W hundred meters. When a ship arrives, you can berth it at any available position in the section at that time, or you can reject berthing it according to your berthing plan. Now the problem becomes a packing model of 3 dimensions (length, width, time). Since the width of a section is the same as ships, we can just consider the problem in 2 dimensions (length, time).
Here is the explanation of the last data set in the sample input. The port has one section, which is 2 hundred meters long. There are four ships arriving at time 1, 5, 2, 4 and departing at time 3, 6, 8, 10 respectively. They are all berthed in section one. Figure 1 and Figure 2 are two legal berthing plans, from which we can know the maximal number of berthed ships is 3.


Max, the consultant of the harbor bureau, thinks that it is a ZSU(Zappy Ships Unallocation) problem. As his name, Max wants to make a plan to maximize the total number of berthed ships, in other words, minimize the number of unberthed ships. Just like other packing problems, it is difficult for Max to solve. But he believes that the best team of the contest is able to solve it both correctly and effectively. Do your guys want to be the best? Just try it.

Input

Input contains many test data sets. A test data set is defined as follow:
The first line of test data set is two integers: m and n, separated by one or more spaces (1<=m<=10, 1<=n<=100000). m is the number of sections in the port, and n is the number of ships. 
The next m lines, one positive integer r (that means the length of the section is r hundred meters long) per line. The length of each section does not exceed 10000 hundred meters. 
The next n lines give one ship information on each line, with three non-negative integers s, e, sec (0<=s<=e, 1<=sec<=m) per line, s is the arrival time of the ship, e is the departure time of the ship, and sec is the section which the ship should be berthed in. 
Input is ended by EOF. You can assume that all the input data are legal. 

Output

For each test data set you should output one integer, the maximal number of the berthed ships, per line.

Sample Input

2 6
3
3
1 2 1
1 2 1
1 2 1
1 2 1
1 2 2
1 2 2

1 3
2
1 3 1
2 6 1
2 8 1

1 4
2
1 3 1
5 6 1
2 8 1
4 10 1

Sample Output

5
2

3

// Problem#: 1733
// Submission#: 3584333
// The source code is licensed under Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License
// URI: http://creativecommons.org/licenses/by-nc-sa/3.0/
// All Copyright reserved by Informatic Lab of Sun Yat-sen University
#include <stdio.h>
int main() {
    printf("3\n2\n5\n24\n3\n6\n10\n60\n60\n5\n96\n96\n96\n96\n96\n240\n302\n362\n362\n362\n240\n240\n302\n362\n166\n166\n166\n166\n166\n208\n208\n208\n208\n208\n250\n292\n63080\n100000\n89915\n");
    return 0;
}                                 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值