codevs 4310 复制书稿

4310 复制书稿

时间限制: 1 s

空间限制: 4000 KB

题目等级 : 黄金 Gold

题解

查看运行结果

题目描述 Description

现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三和第四本书给同一个人抄写。

现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

输入描述 Input Description

第一行两个整数m,k;(k≤m≤500),

第二行m个整数,第i个整数表示第i本书的页数。

输出描述 Output Description

共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号。k行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。

样例输入 Sample Input

9  3

1  2  3  4  5  6  7  8  9

样例输出 Sample Output

1 5

6 7

8 9

数据范围及提示 Data Size & Hint

k≤m≤500

#include<cstdio>
#include<iostream>
using namespace std;
int m,k;
int a[600],b[600],f[600][600];
void xx(int x,int y)//输出,贪心
{
	if (y==0) return;
	if (y==1) //只有一个人抄书
	  {
          cout<<1<<‘ ‘<<x<<endl;
          return;
	  }
	int t=x,l=a[x];
	while (l+a[t-1]<=f[k][m]) //只要第j个人能抄,就让他抄,使前j个人抄书负担最小
	  {
	  	l+=a[t-1];
	  	t--;
	  }
	xx(t-1,y-1);//此时只有t-1本书可以抄,还有y-1个人
	cout<<t<<‘ ‘<<x<<endl;//递归输出
}
int main()
{
	scanf("%d%d",&m,&k);
	for (int i=1;i<=k;i++)
	  for (int j=1;j<=m;j++)
	    f[i][j]=1000000;
	for (int i=1;i<=m;i++)
	  {
	  	 scanf("%d",&a[i]);
	  	 b[i]=b[i-1]+a[i];
	  	 f[1][i]=b[i];
	  }

	for (int i=2;i<=k;i++)//f[i][j]为j本书交给i个人抄所需的最短时间
	  for (int j=i;j<=m;j++)
	    for (int p=1;p<=j-1;p++)
	      f[i][j]=min(f[i][j],max(f[i-1][p],b[j]-b[p]));
	xx(m,k);//从最后一个人开始分配
	return 0;
}

  

时间: 2024-09-26 20:09:21

codevs 4310 复制书稿的相关文章

复制书稿(动规)

[动态规划]复制书稿 Time Limit:1000MS Memory Limit:65536K Description 有M本书(编号为1,2,-,M),每本书都有一个页数(分别是P1,P2,-,PM).想将每本都复制一份.将这M本书分给K个抄写员(1<=K<=M<=500),每本书只能分配给一个抄写员进行复制.每个抄写员至少被分配到一本书,而且被分配到的书必须是连续顺序的.复制工作是同时开始进行的,并且每个抄写员复制一页书的速度都是一样的.所以,复制完所有书稿所需时间取决于分配得到最

白书 第九章 例 9.24 复制书稿 题解

题目解法: 题解 白书 第九章 例 9.24 复制书稿 题解,码迷,mamicode.com

复制书稿

[题目描述] 现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三和第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. [输入描述] 第一行两个整数m,k;(k≤m≤500), 第二行m个整数,第i个整数表示第i本书的页数. [输出描述] 共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号.k行的起始编号应该从小到大

Laoj P1271 复制书稿

问题背景 动态规划入门-第20题 试题描述 现在要把m本有顺序的书分给k人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第四本书给同一个人抄写. 现在请你设计一种方案,使得复制时间最短.复制时间为抄写页数最多的人用去的时间. 输入格式 第一行两个整数m,k:(k≤m≤500)第二行m个整数,第i个整数表示第i本书的页数. 输出格式 共k行,每行两个整数,第i行表示第i个人抄写的书的起始编号和终止编号.k行的起始

[题解]codevs &amp; vijos 爱在心中

描述 “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况).爱是具有传递性的,即如果A爱B,B爱C,则A也爱C. 如果有这样一部分人,他们彼此都相爱,则他们就超越了一切的限制,用集体的爱化身成为一个爱心天使. 现在,我们想知道在这个爱的国度里会出现多少爱心天使.而且,如果某个爱心天使被其他所有人或爱

Linux 将文件夹下的所有文件复制到另一个文件里

如何将文件夹/home/work下的文件复制到/home/temp里面? 使用命令: cp -R /home/work/* /home/temp *表示所有文件 但是/home/work 下的隐藏文件都不会被拷贝 更好的复制的方法是用"."代替"*"就好了. cp -R /home/work/.  /home/temp 将一个文件夹复制到另一个文件夹下,例如将/home下的work文件夹复制到temp下面 命令为: cp -R /home/work  /home/t

MySQL 主主复制

MySQL的主主复制就是两台 mysql 节点互为主从.搭建起来 mysql 主从,再来搭建主主复制就非常简单了. 视频链接:http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e 在原来主从的基础上做如下操作: 1.开启原从节点的 binlog 日志 2.原从节点创建读取副本的用户 3.在原主节点中让 master 指向从节点 4.在原主节点执行 start slave 命令 以上步骤即可完成主主节点的配置 下面有一

MySQL集群(二)之主主复制

前面介绍了主从复制,这一篇我将介绍的是主主复制,其实听名字就可以知道,主主复制其实就是两台服务器互为主节点与从节点.接下来我将详细的给大家介绍,怎么去配置主主复制! 一.主从复制中的问题 1.1.从节点占用了主节点的自增id 环境: 主节点:zyhserver1=1.0.0.3 从节点:udzyh1=1.0.0.5 第一步:我们在主节点中创建一个数据库db_love_1,在创建一个表tb_love(里面有id自增和name属性). create database db_love_1; use d

xshell复制粘贴

用户看到这个标题肯定会觉得小编脑子坏掉了,复制粘贴不就是Ctrl+C,Ctrl+V嘛,但是在xshell却不尽然. 现象: 在xshell界面中需要用到之前的一段代码,自然是选中,熟练的键入Ctrl+C,打算复制,可是再次键入Ctrl+V时,一点反应都没有,无论怎样尝试都是一样. 原因分析: 在xshell中,Ctrl+C 代表着中断当前指令,与WIndows中的复制的快捷键重复,所以才出现了上述的现象 解决方法 1. 使用xshell中的复制粘贴快捷键 复制:Ctrl+Insert 粘贴:Sh