第九章 动态规划-1278:【例9.22】复制书稿(book)
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
思路:最短时间为抄写页数最多的时间,所以要先求最多的抄写页数,从中选择最小值
- 设状态:f[i][j]//将前i本书分给j个人抄写需要的最短时间;
- 初始状态:f[i][1];//一个人抄写前i本书需要的最短时间就是前i本书的页数
最终状态:f[m][k];//将前m本书分给j个人抄写需要的最短时间 - 状态转移方程:先分配最后一个人抄写的页数,求得最大值 。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)相关推荐
- 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划
总目录详见:https://blog.csdn.net/mrcrack/article/details/86501716 信息学奥赛一本通(C++版) 第二部分 基础算法 第九章 动态规划 第一节 动 ...
- 第九章 动态规划-1261:【例9.5】城市交通路网
1261:[例9.5]城市交通路网 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3909 通过数: 2854 [题目描述] 下图表示城市之间的交通路网,线段上的数字表示费用,单 ...
- 第九章 动态规划-1262:【例9.6】挖地雷
[题目描述] 在一个地图上有n个地窖(n≤200),每个地窖中埋有一定数量的地雷.同时,给出地窖之间的连接路径,并规定路径都是单向的,且保证都是小序号地窖指向在序号地窖,也不存在可以从一个地窖出发经过 ...
- 玩转算法之面试第九章-动态规划
动态规划: 9-12 斐波那契数列 对重复计算,进行优化,进行记忆化搜索 假设基本的问题已经被解决,依次内推. 动态规划:将原问题拆解成若干个子问题,同时保存子问题的答案,使得每个子问题只求解一次,最 ...
- 第九章 动态规划-1296:开餐馆
1296:开餐馆 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 3952 通过数: 1923 [题目描述] 信息学院的同学小明毕业之后打算创业开餐馆.现在共有n个地点可供选择.小 ...
- 算法图解第九章动态规划读书笔记
动态规划是一种解决棘手问题的方法,它将问题分成小问题,并先着手解决这些小问题 一.背包问题:一个背包的容量是4磅,吉他容量一磅,价值1500美元,音响容量4磅,价值3000美元,笔记本电脑容量3磅,价 ...
- day46第九章动态规划(二刷)
今日任务 139.单词拆分 关于多重背包,你该了解这些! 背包问题总结篇! 关于多重背包,力扣上没有相关的题目,所以今天大家的重点就是回顾一波自己做的背包题目吧. 139.单词拆分 题目链接: htt ...
- 信息学奥赛一本通 1278:【例9.22】复制书稿(book) | 洛谷 P1281 书的复制
[题目链接] ybt 1278:[例9.22]复制书稿(book) 洛谷 P1281 书的复制 [题目考点] 1. 动态规划:线性动规 [解题思路] 该题可以抽象为:将由m个数字构成的序列分成k个子段 ...
- perl5 第九章 关联数组/哈希表
第九章 关联数组/哈希表 by flamephoenix 一.数组变量的限制 二.定义 三.访问关联数组的元素 四.增加元素 五.创建关联数组 六.从数组变量复制到关联数组 七.元素的增删 八.列出数 ...
最新文章
- Django-路由控制
- javascript 类继承
- 力扣704,二分查找(JavaScript)
- Google 封杀我写的 Web 浏览器!
- oracle 对象类型是什么意思,Oracle-对象类型
- 三元运算符和if else_PHP If-Else,Switch Case和速记三元运算符示例
- 推荐一个免费绘制软件架构图的网站
- Mac双开微信(2种方法)、Win多开微信
- librdkafka配置
- Denoise Autoencoder
- 计算机多媒体技术主要有什么特征,多媒体技术特征有哪些_多媒体技术的关键特性介绍...
- flash 围棋_围棋怎么玩,最还有flash
- 如何选择固定资产标签?
- 程序员如何管理好自己的思维?
- Android 一共有多少种动画?准确告诉你!
- linux下java导出execl_POI实现导出EXCEL详解
- OFweek 2018中国物联网大会暨展览会成功举办!
- Java顺序与选择结构实验问题,初中物理说课稿模板2
- flutter 中使用 WebView加载H5页面异常net:ERR_CLEARTEXT_NOT_PERMITTED
- 车辆监控系统使用帮助