博客
关于我
【SSL】1203书的复制(normal)
阅读量:334 次
发布时间:2019-03-04

本文共 1108 字,大约阅读时间需要 3 分钟。

【SSL】1203书的复制(normal)

Time Limit:1000MS
Memory Limit:65536K

Description

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

Input

第一行两个整数,m,k(k<=m<=500)
第二行为m个整数,第i个数表示第i本书的页数。

Output

最短时间

Sample Input

9 3
1 2 3 4 5 6 7 8 9

Sample Output

17

思路

设f[i][j]表示前i本书交由j个人抄写需要的最短时间,则状态转移方程为:
f[i][j]=min(f[i][j],max(f[i-1][l],sum[j]-sum[l]));
1<=i<=n,1<=j<=k,1<=l<j

代码

#include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<cstdlib>#include<cmath>#include<iomanip> using namespace std;int n,k,a[1010],f[1010][1010],sum[1010];void input(){   	int i;	scanf("%d%d",&n,&k);	for(i=1;i<=n;i++)	{   		scanf("%d",&a[i]);		sum[i]=sum[i-1]+a[i];//预处理前缀和		f[1][i]=sum[i];	}	return;}void DP(){   	int i,j,l;	for(i=2;i<=k;i++)	{   		for(j=1;j<=n;j++)		{   			f[i][j]=100000000;			for(l=1;l<j;l++)			{   				if (l==1)					f[i][j]=max(f[i-1][l],sum[j]-sum[l]);//状态转移方程				else					f[i][j]=min(f[i][j],max(f[i-1][l],sum[j]-sum[l]));			}		}	}	return;}int main(){   	input();	DP();	printf("%d ",f[k][n]);	return 0;} 

转载地址:http://zvze.baihongyu.com/

你可能感兴趣的文章
【故障公告】极验验证码故障造成无法登录与注册
查看>>
上周热点回顾(6.25-7.1)
查看>>
【故障公告】10:30-10:45 左右 docker swarm 集群节点问题引发故障
查看>>
工作半年的思考
查看>>
不可思议的纯 CSS 滚动进度条效果
查看>>
【CSS进阶】伪元素的妙用--单标签之美
查看>>
开始CN的生活
查看>>
惊闻NBC在奥运后放弃使用Silverlight
查看>>
IE下尚未实现错误的原因
查看>>
Kubernetes 学习系列文章
查看>>
创建自己的Docker基础镜像
查看>>
使用Jenkins来实现内部的持续集成流程(上)
查看>>
HTTP 协议图解
查看>>
Python 简明教程 --- 20,Python 类中的属性与方法
查看>>
Python 简明教程 --- 21,Python 继承与多态
查看>>
KNN 算法-理论篇-如何给电影进行分类
查看>>
Spring Cloud第九篇 | 分布式服务跟踪Sleuth
查看>>
CODING 敏捷实战系列课第三讲:可视化业务分析
查看>>
使用 CODING DevOps 全自动部署 Hexo 到 K8S 集群
查看>>
工作动态尽在掌握 - 使用 CODING 度量团队效能
查看>>