题目名称 273. [NOI 1998]软件安装盘
输入输出 software.in/out
难度等级 ★★★☆
时间限制 1000 ms (1 s)
内存限制 128 MiB
测试数据 5
题目来源 GravatarBYVoid 于2009-02-22加入
开放分组 全部用户
提交状态
分类标签
NOI 搜索法
分享题解
通过:5, 提交:8, 通过率:62.5%
Gravatarzqzas 100 0.194 s 5.88 MiB C++
Gravatariloi 100 2.905 s 0.40 MiB C++
GravatarBYVoid 100 2.939 s 0.40 MiB C++
Gravatarzjuyxy 100 3.475 s 0.40 MiB C++
GravatarBYVoid 100 3.505 s 0.34 MiB C++
Gravatar_Itachi 0 0.578 s 0.23 MiB C++
GravatarGo灬Fire 0 1.537 s 0.30 MiB C++
Gravatar游弋 0 2.336 s 69.17 MiB C++
关于 软件安装盘 的近10条评论(全部评论)
额,交错题了。。
Gravatar_Itachi
2016-08-03 14:05 1楼

273. [NOI 1998]软件安装盘

★★★☆   输入文件:software.in   输出文件:software.out   评测插件
时间限制:1 s   内存限制:128 MiB

软件安装通常是一件令人头疼的事。软件一般都包括若干个相对独立的部分(称为“组件”),在安装的时候由用户决定安装哪些部分。并且,这些相对独立的组件之间在安装时有一定的先后顺序要求。

由于当代的个人计算机普遍安装了软盘驱动器,所以软件的最流行的载体形式是软盘。然而,由于软盘的容量有限,稍大一些的软件就无法用一张软盘装下。这时,这些软件往往要用很多张软盘来存储。每张磁盘上存储了软件的一个或多个组件。这些软盘称为软件的安装盘。

由于软件的各个组件分散在不同的软盘上,而在安装时又有一定的先后顺序要求,所以很容易发生要求用户反复换盘的情况。而计算机用户在安装软 件的时候,最反感的就是反复在软盘之间切换:找盘、插盘、取盘、找盘、插盘、取盘、…,一切都显得那么琐碎和无序。因此,有必要对软件安装盘的制作提出下 述要求:

永远不要让用户将一张磁盘插入两次。更精确地,要求对安装盘从1开始顺序编号,使得安装的时候,用户只要按顺序插入磁盘即可。

出于经济的考虑,通常要求安装盘的总数最少。写一个程序,对于给定的软件,制定最优的安装盘方案。

输入

  • 输入文件的第一行是一个正整数M(1<= M<= 109),给出了每张磁盘的最大容量(字节数)。
  • 输入文件的第二行是一个正整数N(1<= N<= 100),给出了软件的组件数。接下来的N行每行给出一个组件的详细信息。包括:
  1. 组件所占的字节数;
  2. 在安装该组件之前应先安装的组件序号(如有多个组件须先安装,则每个都应列出其序号,若无须先安装其它组件,则该行只含组件所占字节数)。
  • 输入文件中同一行相邻两项之间用一个或多个空格隔开。

输出

输出文件的第一行给出了最优安装盘方案的软盘数。如果不存在最优安装盘方案,则输出0。接下来的每一行顺序给出了每张盘上存储的组件的序号。如果一张盘上存储了多个组件,则输出所有这些组件的序号,中间用一个空格隔开。

样例输入

1457664
3
512665
912345 1
832542 1

样例输出

2
1 2
3