问题标题: 酷町堂:2894 抄书

0
0
已解决
张帆
张帆
中级天翼
中级天翼
题目描述 Description
新学期又要开始了,打印社的生意也渐渐开始好转,现在打印社的老板要把m本有顺序的书分给k个员工去抄写,每一个人的抄写速度都一样,一本书不允许给两个(或以上)的人抄写,分给每一个人的书,必须是连续的,比如不能把第一、第三、第四本书给同一个人抄写。现在请你设计一种方案,使得复制时间最短。复制时间为抄写页数最多的人用去的时间。

输入描述 Input Description
第一行两个整数m,k;(k≤m≤500)

第二行m个整数,第i个整数表示第i本书的页数。

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

样例输入 Sample Input
9 3
1 2 3 4 5 6 7 8 9
样例输出 Sample Output
1 5
6 7
8 9

本蒟蒻WA60:

#include<iostream>
using namespace std;

int m,k;
int a[510],step[510][2];

bool check(int tmp){
    int cnt=0,sum=0;
    for(int pos=m;pos>=1;pos--){
        if(sum+a[pos]>tmp||pos==1){
            sum=0;
            cnt++;
            sum=a[pos];
        } else { sum+=a[pos]; }
    }
    if(cnt<=k){
        return true;
    } 
    else return false;
}

int main(){
    cin>>m>>k;
    for(int i=1;i<=m;i++) cin>>a[i];
    int l=1,r=1000000;
    while(l+1<r){
        int mid=(l+r)/2;
        if(check(mid)) r=mid;
        else l=mid;
    }
    if(m==k){
        for(int i=1;i<=m;i++) cout<<i<<" "<<i<<"\n";
        return 0;
    }
    int cnt=0,sum=0;
    step[1][0]=m;
    for(int i=m;i>=1;i--){
        if(sum+a[i]>r||i==1){
            cnt++;
            step[cnt][1]=i+1;
            step[cnt+1][0]=i;
            sum=a[i];
        } else { sum+=a[i]; }
    }
    step[k][1]=1;
    for(int i=k;i>=1;i--){
        cout<<step[i][1]<<" "<<step[i][0]<<"\n";
    }
    return 0;
}

 


0
已采纳
侯平仄
侯平仄
新手天翼
新手天翼

哎我也是崩溃了,这题洛谷AC,酷町堂WA90,同问怎么回事啊/youl

0
汪恺恒
汪恺恒
中级启示者
中级启示者

主函数

 scanf("%d %d",&n,&m); 
    if(n==0){
        return 0;
    } 
    int l=0,r,mid;
    for(int i=1;i<=n;i++){
        scanf("%d",&a[i]);
        r+=a[i]; 
    }
    while(l<=r){
        mid=(l+r)/2;
        if(ch(mid)){
            ans=mid;
            r=mid-1;
        }
        else l=mid+1;
    }
    pr(1,n);

ch函数

bool ch(int x){
    int su=0,an=0;
    for(int i=n;i>=1;i--){
        if(i==1) 
            an++;
        if(su+a[i]<=x){
            su+=a[i];
        }
        else{
            an++;
            su=a[i];
        }
    }
    if(an<=m){
        return 1;
    }
    return 0;
}

pr函数自己想(输出方案)

0
孔小川
孔小川
初级光能
初级光能

bool 是什么意思? 那位TEACHER给我讲一下!

0
0
我要回答