1278:【例9.22】复制书稿(book)

时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
现在要把m本有顺序的书分给k个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三和第四本书给同一个人抄写。

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

【输入】
第一行两个整数m,k;(k≤m≤500)

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

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

【输入样例】
9 3
1 2 3 4 5 6 7 8 9
【输出样例】
1 5
6 7
8 9


思路:最短时间为抄写页数最多的时间,所以要先求最多的抄写页数,从中选择最小值

  1. 设状态:f[i][j]//将前i本书分给j个人抄写需要的最短时间;
  2. 初始状态:f[i][1];//一个人抄写前i本书需要的最短时间就是前i本书的页数
    最终状态:f[m][k];//将前m本书分给j个人抄写需要的最短时间
  3. 状态转移方程:先分配最后一个人抄写的页数,求得最大值 。max(f[i-l][j-1],d[i]-d[i-l]);
    最后求最短时间 f[i][j]=min{max(f[i-l][j-1],d[i]-d[i-l])}
    在用动态规划求得最优值后,然后用贪心的思想,将最后一本书按逆序将书分配给k个人抄写,从第k个人开始,如果他还能写,就给他,直到分配完毕。
#include<iostream>
#include<cstdio>
#define INF 0X3F3F3F3F
#define N 501
using namespace std;
int i,j,x,y,m,n,k,t,l;
int a[N];//存储每本书的页数
int f[N][N];//f[i][j]表示前i本书分给j个人抄写的最短复制时间
int d[N];//d[j]表示前j本书的总页数
int print(int i,int j)
{int t,x;if(j == 0) return 0;if(j == 1) {cout << 1 << " " << i << endl;return 0;}t = i;x = a[i];while(x+a[t-1] <= f[m][k]){x = x + a[t-1];t--;}print(t-1,j-1);cout << t << " " << i << endl;
}
int main()
{cin >> m >> k;for(i = 0;i <= 500;i++){for(j = 0;j <= 500;j++){f[i][j] = INF;//对f[i][j]进行初始化 }}  for(i = 1;i <= m;i++){cin >> a[i];d[i] = d[i-1] + a[i];f[i][1] = d[i];//把前i本书都分给1个人抄写需要的最短时间 }for(j = 2;j <= k;j++)//j个人  {for(i = 1;i <= m;i++)//i本书 {for(l = 1;l <= i-1;l++)//最后一个人抄写的页数{if(max(f[i-l][j-1],d[i]-d[i-l]) < f[i][j])f[i][j] = max(f[i-l][j-1],d[i]-d[i-l]);} }}print(m,k);
} 

第九章 动态规划-1278:【例9.22】复制书稿(book)相关推荐

  1. 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划

    总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...

  2. 第九章 动态规划-1261:【例9.5】城市交通路网

    1261:[例9.5]城市交通路网 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3909 通过数: 2854 [题目描述] 下图表示城市之间的交通路网,线段上的数字表示费用,单 ...

  3. 第九章 动态规划-1262:【例9.6】挖地雷

    [题目描述] 在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过 ...

  4. 玩转算法之面试第九章-动态规划

    动态规划: 9-12 斐波那契数列 对重复计算,进行优化,进行记忆化搜索 假设基本的问题已经被解决,依次内推. 动态规划:将原问题拆解成若干个子问题,同时保存子问题的答案,使得每个子问题只求解一次,最 ...

  5. 第九章 动态规划-1296:开餐馆

    1296:开餐馆 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3952 通过数: 1923 [题目描述] 信息学院的同学小明毕业之后打算创业开餐馆.现在共有n个地点可供选择.小 ...

  6. 算法图解第九章动态规划读书笔记

    动态规划是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题 一.背包问题:一个背包的容量是4磅,吉他容量一磅,价值1500美元,音响容量4磅,价值3000美元,笔记本电脑容量3磅,价 ...

  7. day46第九章动态规划(二刷)

    今日任务 139.单词拆分 关于多重背包,你该了解这些! 背包问题总结篇! 关于多重背包,力扣上没有相关的题目,所以今天大家的重点就是回顾一波自己做的背包题目吧. 139.单词拆分 题目链接: htt ...

  8. 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制

    [题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...

  9. perl5 第九章 关联数组/哈希表

    第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制 二.定义 三.访问关联数组的元素 四.增加元素 五.创建关联数组 六.从数组变量复制到关联数组 七.元素的增删 八.列出数 ...

最新文章

  1. Django-路由控制
  2. javascript 类继承
  3. 力扣704,二分查找(JavaScript)
  4. Google 封杀我写的 Web 浏览器!
  5. oracle 对象类型是什么意思,Oracle-对象类型
  6. 三元运算符和if else_PHP If-Else,Switch Case和速记三元运算符示例
  7. 推荐一个免费绘制软件架构图的网站
  8. Mac双开微信(2种方法)、Win多开微信
  9. librdkafka配置
  10. Denoise Autoencoder
  11. 计算机多媒体技术主要有什么特征,多媒体技术特征有哪些_多媒体技术的关键特性介绍...
  12. flash 围棋_围棋怎么玩,最还有flash
  13. 如何选择固定资产标签?
  14. 程序员如何管理好自己的思维?
  15. Android 一共有多少种动画?准确告诉你!
  16. linux下java导出execl_POI实现导出EXCEL详解
  17. OFweek 2018中国物联网大会暨展览会成功举办!
  18. Java顺序与选择结构实验问题,初中物理说课稿模板2
  19. flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
  20. 车辆监控系统使用帮助

热门文章

  1. Linux下Rootkit介绍
  2. 达内-JavaWeb考试复习
  3. 我和Ruby之父松本行弘的握手
  4. 线性代数之向量间线性关系
  5. 泛微考勤加班流程,有重复的时间段不让提交
  6. 如果iPhone被标记被盗或丢失 苹果将拒绝维修
  7. 苹果的福利被“羊毛党”薅废了
  8. 前端的Docker入门实战
  9. power-virus
  10. 聚类算法初探(六)OPTICS