Description 题目描述

现在要把MMM本有顺序的书分给KKK个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

Input 输入

第一行两个整数M、KM、KM、K;(0≤K≤M≤500)(0≤K≤M≤500)(0≤K≤M≤500)
第二行MMM个整数,第iii个整数表示第iii本书的页数。

Output 输出

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

Sample Input 样例输入

9 3
1 2 3 4 5 6 7 8 9

Sample Output 样例输出

1 5
6 7
8 9

Limits 限制

详见试题
Time Limit : 1s1s1s & Memory Limit : 128MB128MB128MB

第一次见到这题是考试的时候
不会啊!!!
什么都没输出,得了10分(rp就这么用光了…)
首先可以dp做
dp[i][j]dp[i][j]dp[i][j]表示前iii页书被jjj个人抄,抄写最多的页数
dp[i][j]dp[i][j]dp[i][j]=min(max(dp[k][i−1],sum[k+1,i]))min(max(dp[k][i-1],sum[k+1,i]))min(max(dp[k][i−1],sum[k+1,i]))
输出贪心思路搞定
上代码

#include <cstdio>
#include <climits>
#define MAXN 1100
using namespace std; int dp[MAXN][MAXN];
int ans[MAXN][2];
int n,k,m,i,j;
int p,q,cnt;
int a[MAXN];
int sum[MAXN]; int mymax(int a,int b)
{ return a>b?a:b;
}
int main()
{ scanf("%d %d",&n,&k); for(i=1;i<=n;i++) for(j=1;j<=k;j++) dp[i][j]=INT_MAX; for(int i=1;i<=n;i++) { scanf("%d",&a[i]); sum[i]=sum[i-1]+a[i]; dp[i][1]=sum[i]; } for(m=2;m<=k;m++) for(i=1;i<=n;i++) for(j=1;j<i;j++) { if(dp[i][m]>mymax(dp[j][m-1],sum[i]-sum[j])) dp[i][m]=mymax(dp[j][m-1],sum[i]-sum[j]); } p=n,q=k; for(i=n;i>=1;i--) { cnt+=a[i]; if(cnt>dp[n][k]) { ans[q][0]=i+1; ans[q][1]=p; p=i; q--; cnt=a[i]; } } ans[1][0]=1;ans[1][1]=p; for(int i=1;i<=k;i++) if (ans[i][0]&&ans[i][1]) printf("%d %d\n",ans[i][0],ans[i][1]); return 0;
}

但是有点卡时……
正解是二分答案,类似 NOIP 2015 跳石头的思路。
Code

引用学长一句话:
男人,要直面自己的弱点…

[二分] [CodeVS3162] 抄书问题相关推荐

  1. codevs-3162 抄书问题

    codevs-3162 抄书问题 题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须 ...

  2. 【二分】抄书 (jzoj 2123)

    抄书 题目大意: 有n本书,分给m个人抄,每个人只能拿到连续的书(不能把一本书分开),问抄书最多的人要抄多少页 样例输入 9 3 100 200 300 400 500 600 700 800 900 ...

  3. Codevs3162抄书问题题解

    题目 题目来源 http://codevs.cn/problem/3162/ 题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两 ...

  4. 【查找】- 二分查找

    懒猫老师-二分查找基础知识 代码随想录-二分查找基础知识 1 完全有序 1.1 二分查找 二分查找-力扣题目链接 1.1.1 二分查找 (左闭右闭区间) 1.循环退出条件 注意是 low<=hi ...

  5. Codevs 抄书问题123

    对于抄书问题1,由于标签上写的DP,我就写了DP.... 设dp[I][j]表示前i本书由j个人抄的最小答案,则状态转移方程为 dp[I][j]=min{max(dp[k][j-1],s[I]-s[k ...

  6. WIKIOI 3162 抄书问题 题解与分析

    [题目链接]: http://www.wikioi.com/problem/3162/ [分析]: 这是经典的求最大值最小的问题,用二分答案.二分一个单人抄书的最大值,然后从后向前让每个人尽可能多抄& ...

  7. CODEVS 3162 3163 3168 抄书问题1 2 3

    题目描述 Description 现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一.第三.第 ...

  8. WIKIOI 3163 抄书问题2 题解与分析

    [题目链接]: http://www.wikioi.com/problem/3163/ [分析]: 这是经典的求最大值最小的问题,用二分答案.二分一个单人抄书的最大值,然后从后向前让每个人尽可能多抄& ...

  9. 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/

    大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...

最新文章

  1. 一行代码都不用写,教你如何快速搭建Github博客!!!
  2. zabbix 监控 elasticsearch
  3. CentOS下Yum使用
  4. Spring Boot简介
  5. day4作业小代码练习
  6. 16 寸MacBook Pro比14 寸风扇更强大,更耐用
  7. - 动规讲解基础讲解五——最长公共子序列问题
  8. nyoj - 168房间安排
  9. 中国地质大学计算机学院闫继宁,双吸离心泵内部流动模拟与输水管道系统安全问题研究...
  10. 同志亦凡人第一季/全集BQueer As Folk 1迅雷下载
  11. WebRTC 概念介绍--一篇读懂source、track、sink、mediastream
  12. navicat 连接oracle的配置
  13. 局域网https安全证书解决方案mkcert
  14. nginx配置反向代理验证ssl证书 双向认证
  15. 使用PE镜像修改VMware中Windows镜像的方法
  16. 机械祭天法力无边:练习3.5:编写一段程序从标准输入中读入多个字符串并将它们连接在一起,输出连接成的大字符串。然后修改上述程序,用空格把输入的多个字符串分隔开来。
  17. 【最强规则引擎】-- ICE
  18. CART算法(机器学习)
  19. ZUCC_计算机网络实验_实验09 网络基本命令
  20. 玩转Kaggle:Classify Leaves(叶子分类)——数据分析篇

热门文章

  1. HTML+CSS+JS实现简单滚动效果
  2. 2022-2028全球自动超声波焊接机行业调研及趋势分析报告
  3. 最短作业优先(SJF)
  4. 植保 地面站竞品分析
  5. win10计算机扫描,教你在win10电脑中打开打印机和扫描仪的方法
  6. surface系列安装linux解决触屏等驱动问题以及使用心得
  7. 【知识】漫画:为什么C语言永不过时?
  8. [机器学习导论]—— 第四课——决策树
  9. 解决Delphi截取字符串时遇到半个汉字
  10. 易语言多线程API模块综合应用