• Codeforces Round #334 (Div. 2)


    B. More Cowbell
    time limit per test
    2 seconds
    memory limit per test
    256 megabytes
    input
    standard input
    output
    standard output

    Kevin Sun wants to move his precious collection of n cowbells from Naperthrill to Exeter, where there is actually grass instead of corn. Before moving, he must pack his cowbells into kboxes of a fixed size. In order to keep his collection safe during transportation, he won't place more than two cowbells into a single box. Since Kevin wishes to minimize expenses, he is curious about the smallest size box he can use to pack his entire collection.

    Kevin is a meticulous cowbell collector and knows that the size of his i-th (1 ≤ i ≤ n) cowbell is an integer si. In fact, he keeps his cowbells sorted by size, so si - 1 ≤ si for any i > 1. Also an expert packer, Kevin can fit one or two cowbells into a box of size s if and only if the sum of their sizes does not exceed s. Given this information, help Kevin determine the smallest s for which it is possible to put all of his cowbells into k boxes of size s.

    Input

    The first line of the input contains two space-separated integers n and k(1 ≤ n ≤ 2·k ≤ 100 000), denoting the number of cowbells and the number of boxes, respectively.

    The next line contains n space-separated integers s1, s2, ..., sn(1 ≤ s1 ≤ s2 ≤ ... ≤ sn ≤ 1 000 000), the sizes of Kevin's cowbells. It is guaranteed that the sizes si are given in non-decreasing order.

    Output

    Print a single integer, the smallest s for which it is possible for Kevin to put all of his cowbells into k boxes of size s.

    Sample test(s)
    input
    2 1
    2 5
    
    output
    7
    
    input
    4 3
    2 3 5 9
    
    output
    9
    
    input
    3 2
    3 5 7
    
    output
    8
    
    Note

    In the first sample, Kevin must pack his two cowbells into the same box.

    In the second sample, Kevin can pack together the following sets of cowbells: {2, 3}{5}and {9}.

    In the third sample, the optimal solution is {3, 5} and {7}.

    错因:没有仔细分析题意,一直以为是分组背包问题,,自己把自己吓到了

    解答:贪心问题,先将几个最大的物体一个一个的放入背包中,然后再将小物体加入已有大物体的背包中,要倒序(贪心)

    <span style="font-size:18px;">#include<iostream>
    #include<queue>
    #include<vector>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    #include<cmath>
    using namespace std;
    int a[100005];
    int max(int a,int b)
    {
        return a>b?a:b;
    }
    int main()
    {
        int n,k;
        while(~scanf("%d %d",&n,&k))
        {
            for(int i=1;i<=n;i++)
                scanf("%d",&a[i]);
            if(n<=k)
            {
                printf("%d
    ",a[n]);
                continue;
            }
            int ans=a[n],cnt=n-k,j=n-k+1;
            for(int i=cnt;i>=1;i--)
                ans=max(ans,a[i]+a[j++]);//倒序加进背包,体现贪心思想
            printf("%d
    ",ans);
        }
        return 0;
    }
    </span>


  • 相关阅读:
    用C语言编写生成小学四则运算程序
    每周学习报告
    读现代软件工程有感和自我介绍
    第七天
    第五天
    第六天
    作业九:课程总结
    作业四:结对编程项目--四则运算
    psp记录个人项目花费时间
    作业三:代码规范,代码复查
  • 原文地址:https://www.cnblogs.com/smilesundream/p/6642537.html
Copyright © 2020-2023  润新知