复习时间

此博客链接:https://www.cnblogs.com/ping2yingshi/p/12329156.html

复习时间(57min)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2078

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
题解:
        此题特别考验语文功底,也许你前面浪费了据多时间,把思路用记事本或者纸记录下来,按照写的公式,各种情况赋值,当把题目值代入你算的公式里,你突然发现不对,哈哈哈,不对就对了。
        注意:题目中给的m是一晚上最多只能复习m门课,这句话意思是也可以不复习m门课,比如只复习一门就睡大觉(结果也是每天只复习一门就睡觉了)。
       方法:找难度最小的值。
       思路:题目问他一晚上复习的最高效率值是多少?而选的n门课中,一晚上最多只能复习m门课,按照题目给的效率公式,我们可以用数字表示出来效率公式:
n=m=2
1 a 52
2 b  25

a>b
(a-b)2=b1      27*27
(100-a)2=a1   48*48
max=a1+b1 

n=3 m=2
1 a 
2 b
3 c

从大到小排序  a>b>c

a,b a,c b,c


n=3 m=3

a,b,c
(100-a)2=a1
(a-b)2=b1 --->(100-b)2=b2
(b-c)2=c1 
(100-b)2=b2
max=a1+b2+c1
n=40 m=26

a-z 
max=(100-a)2+(100-b)2+(100-c)2+...+(100-y)2+(y-z)2<(100-z)2    公式1

但是复习多门课的效率和比只复习难度最小的一门课的效率低,即多门效率的和比100减去最小难度的平方的值小。这个也是我百度得来的,具体为啥以上公式1比100减去最小难度的平方值小,数学还没有证明出来。

代码如下:

#include<stdio.h>
#include<math.h>
#include<stdlib.h>
#include<string.h>

int main(void)
{
    int t;
    scanf_s("%d", &t);
    while (t>0)
    {
        int N;
        int M;
        scanf_s("%d %d", &N, &M);
        int i;
        int min=100;
        int a;
        for (i = 0; i < N; i++)
        {
            scanf_s("%d", &a);
            if (min > a)
                min = a;
        }
        
        printf("%d\n",(100-min)*(100-min));
        t--;
    }
    return 0;
}
 
出来混总是要还的
原文地址:https://www.cnblogs.com/ping2yingshi/p/12329156.html