【动态规划】复制书稿
来源:互联网 发布:centos的vmdk文件下载 编辑:程序博客网 时间:2024/05/01 03:48
【动态规划】复制书稿
Time Limit:1000MS Memory Limit:65536K
Description
有M本书(编号为1,2,…,M),每本书都有一个页数(分别是P1,P2,…,PM)。想将每本都复制一份。将这M本书分给K个抄写员(1<=K<=M<=500),每本书只能分配给一个抄写员进行复制。每个抄写员至少被分配到一本书,而且被分配到的书必须是连续顺序的。复制工作是同时开始进行的,并且每个抄写员复制一页书的速度都是一样的。所以,复制完所有书稿所需时间取决于分配得到最多工作的那个抄写员的复制时间。试找一个最优分配方案,使分配给每一个抄写员的页数的最大值尽可能小。
Input
第一行两个整数M、K;(K<=M<=500)
第二行M个整数,第i个整数表示第i本书的页数。
Output
输出为一个数,即分配给每一个抄写员的页数的最大值
Sample Input
9 31 2 3 4 5 6 7 8 9
Sample Output
17
Hint
样例说明:
三个人抄书的位置分别为:
1-5 (15页)
6-7 (13页)
8-9 (17页)
由于要求每位抄写员抄写的书必须是连续的,只要在M和K的循环内部再加一个k循环枚举上一位抄写员的结束位置即可。
#include <cstdio>
#include <algorithm>
#define INF 100000000
using namespace std;
int M,K,p[500+1];
int sum[500+1];//1~i页数和
int dp[500+1][500+1];//dp[i][j]=抄写员1~i抄写1~j本书的MAX
int main()
{
scanf("%d%d",&M,&K);
for(int i=1;i<=M;i++)scanf("%d",p+i),sum[i]=sum[i-1]+p[i];
for(int i=1;i<=K;i++)
for(int j=i;j<=M;j++)//前i位抄写员至少抄写i本,因此令j=i开始循环
if(i==1)dp[i][j]=sum[j];
else
{
dp[i][j]=INF;//初始化为INF
for(int k=i-1;k<=j-1;k++)//枚举第i-1位抄写员结束的位置
dp[i][j]=min(max(dp[i-1][k],sum[j]-sum[k]),dp[i][j]);
}
printf("%d",dp[K][M]);
return 0;
}
- 【动态规划】复制书稿
- 书稿复制(动态规划)
- 书稿复制(动态规划)
- ACM学习-动态规划-复制书稿问题
- 复制书稿(动态规划经典题)
- 复制书稿
- 复制书稿
- 复制书稿
- 复制书稿
- 【二分】复制书稿
- 【资源类动规】复制书稿
- SSL1602 复制书稿(dp)
- P1264 复制书稿
- FZOJ1566 复制书稿
- dp专题:复制书稿
- CODEVS 3162 抄书问题 (复制书稿)
- 复制书稿(动规例题)
- 【动态规划】【RQNOJ】书的复制
- 类与对象
- Hibernate查询语言(HQL)
- Android自定义View之贝塞尔曲线图
- JDK容器与并发—Queue—ArrayBlockingQueue
- android MultiDex multiDex原理(一)
- 【动态规划】复制书稿
- Android java 中如何优雅的结束线程
- Struts2图片的上传下载
- IT技术人的一点点思考
- JAVA+ffmpeg+mencoder转换视频
- Spring Boot使用自定义的properties
- 基于嵌入式操作系统的实时性多任务划分方法
- AsyncTask的正确使用
- 开发小结