zjnu(1277)——书的复制
来源:互联网 发布:手机淘宝售后服务流程 编辑:程序博客网 时间:2024/05/17 05:59
书的复制(Book)-动态规划-中高级
Case Time Limit:1000MSTime Limit: 3000MS Memory Limit: 65536KTotal Submissions: 32 Accepted: 29
Description
现在要把M本有顺序的书分给K个人复制(抄写),每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本数给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。
Input
第一行两个整数M、K;(K<=M<=100)
第二行M个整数,第i个整数表示第i本书的页数。
第二行M个整数,第i个整数表示第i本书的页数。
Output
共K行,每行两个正整数,第i行表示第i个人抄写的书的起始编号和终止编号。K行的起始编号应该从小到大排列,如果有多解,则尽可能让前面的人少抄写。
Sample Input
9 31 2 3 4 5 6 7 8 9
Sample Output
1 56 78 9
我感觉有点无语,虽说是在练dp,但是看到这道题我第一个想法竟然是二分枚举所超的书的最大数量,结果竟然还让我过了= =
思路:
就是二分最大的超书量,然后check一下是否可行就好了。
这里注意,当二分分的过大或是当前情况虽然是不能成立(也就是当所需人数小于K个人)时,都返回true,因为此时说明我们的区间分的过大了。
其他情况的都返回false。
不过,速度确实是二分的快呢 O(∩_∩)O哈哈~
(dp的方法暂时还不会,说是邮局类的问题,这个我还不是很懂= =,下次学了再补上吧)
#include<cstdio>#include<cstring>#include<map>#include<set>#include<cmath>#include<algorithm>#include<vector>#include<queue>#include<iostream>using namespace std;typedef __int64 ll;typedef unsigned __int64 ULL;#define inf 99999999#define con 100010#define maxn 110int a[maxn],sum;int m,k;struct node{ int s,e;}t[maxn];bool check(int mid){ int res=0; int cnt=k; int flag=0,i; for(i=m;i>=1;i--){ if(res+a[i]<=mid){ res+=a[i]; if(!flag) t[cnt].e=i,flag=1; } else if(res+a[i]>mid){ t[cnt--].s=i+1; if(cnt==0) return false; t[cnt].e=i; res=a[i]; flag=1; } } if(i==0&&cnt==1){ t[cnt].s=1; return true; } return true;}int bin(int l,int r){ int mid; int ans=inf; while(l<r){ mid=l+(r-l)/2; if(check(mid)){ r=mid; ans=min(ans,mid); } else l=mid+1; } return ans;}int main(){ int lmax=-1; scanf("%d%d",&m,&k); for(int i=1;i<=m;i++) scanf("%d",&a[i]),sum+=a[i],lmax=max(lmax,a[i]); int ans=bin(lmax,sum); for(int i=1;i<=k;i++){ printf("%d %d\n",t[i].s,t[i].e); } return 0;}
加油!
0 0
- zjnu(1277)——书的复制
- ZJNU初级题——水题
- ZJNU——统计数字(1402)
- ZJNU——1695(分栗子)
- zjnu(1182)——能量项链
- zjnu(1181)——石子合并
- ZJNU——1259:幸运数字(找规律题)
- ZJNU——1262电灯泡(三分题)
- zjnu(1299)——零件分组(LIS变形)
- ZJNU-1416(图的建立与遍历)
- zjnu(1183)——括号序列【基础算法・动态规划】——高级
- 2009ACM多校联合暑期集训(14)——ZJNU专场
- hdu(3047)——Zjnu Stadium(高级并查集)
- zjnu(1175)——合唱队形【基础算法・动态规划】
- DP——书的复制
- zjnu 1275 最大的算式(Bigexp)(区间DP)
- ZJNU 1426 YNingC的困惑(离散化)
- hdu3047 Zjnu Stadium(简单的路径压缩)
- 获取文件扩展名方法
- 把一个对象存储到硬盘上——Externalizable
- 查找文件位置
- linux socket can程序cantool
- Sorry, Ubuntu xx.xx Has Experienced An Internal Error
- zjnu(1277)——书的复制
- 查找算法(4个简单的算法)
- Caused by: org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'xml-bod
- Java元注解
- Factorial
- 状态转移矩阵(status transition matrix )
- The Apache Tomcat Native library which allows optimal performance 的解决
- Android Resource篇--- I 存放资源文件的规则
- UIPickerView的点滴