HDU 2078 复习时间

传送门:

http://acm.hdu.edu.cn/showproblem.php?pid=2078

复习时间

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 10525    Accepted Submission(s): 7674


Problem Description
为了能过个好年,xhd开始复习了,于是每天晚上背着书往教室跑。xhd复习有个习惯,在复习完一门课后,他总是挑一门更简单的课进行复习,而他复习这门课的效率为两门课的难度差的平方,而复习第一门课的效率为100和这门课的难度差的平方。xhd这学期选了n门课,但是一晚上他最多只能复习m门课,请问他一晚上复习的最高效率值是多少?
 

 

Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),m(1 <= m <= n)。
接着有n行,每行有一个正整数a(1 <= a <= 100),表示这门课的难度值。
 

 

Output
对于每组输入数据,输出一个整数,表示最高效率值。
 

 

Sample Input
2 2 2 52 25 12 5 89 64 6 43 56 72 92 23 20 22 37 31
 

 

Sample Output
5625 8836
 

 

Author
xhd
 

 

Source
 
分析:
将课程按照难度排序
在这一天内
第一门先选择难度最小的
然后再选择难度最大的
然后再选择难度第二小的
然后选择难度第二大的
直到选满m门
原因:保证每次的难度差的最大的
贪心
code:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define max_v 45
int main()
{
    int a[max_v];
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int n,m;
        scanf("%d %d",&n,&m);
        for(int i=0; i<n; i++)
        {
            scanf("%d",&a[i]);
        }
        sort(a,a+n);
        int i=0,j=n-1;
        int c=1;
        int cs=a[0];
        int maxvalue=100-cs;
        int cv;
        while(1)
        {
            c++;
            if(c>m)
                break;
            if(c%2==0)
            {
                cv=a[j];
                if(cv-cs>maxvalue)
                {
                    maxvalue=cv-cs;
                }
                cs=cv;
            }else
            {
                cv=a[i];
                if(cv-cs>maxvalue)
                {
                    maxvalue=cv-cs;
                }
                cs=cv;
            }
            i++;
            j--;
        }
        printf("%d\n",maxvalue*maxvalue);
    }
    return 0;
}

 

posted @ 2018-07-13 20:39  西*风  阅读(223)  评论(0编辑  收藏  举报