您的位置:首页 > 其它

HDU2078:复习时间

2013-05-27 18:38 302 查看
点击打开题目链接

复习时间

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 3314    Accepted Submission(s): 2484


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

ACM程序设计期末考试_热身赛(感谢
xhd & 8600)
 

Recommend

lcy
 

=====================================[ 分析 ]=====================================

题意:复习第一门课的效率为100和这门课的难度差的平方。

看作:一开始便挑选了一门复习难度为100且复习效率为0的特殊课程S。

如果:将所选的m门课程与S按照复习难度降序排列为A0,A1,A2,......,Am(显然有A0=S)。

根据:(A0-A1)+(A1-A2)+......+(Am-1-Am)=(A0-Am)。

就有:(A0-A1)^2+(A1-A2)^2+......+(Am-1-Am)^2≤(A0-Am)^2。

也即:任选m门课程不会优于只选择这些课程中复习难度最小的那门。

再由:(A0-Am)^2≤(A0-Amin)^2(Amin为给出的n门课程中复习难度最小的那个)。

可知:只选择Amin复习即可取得最高复习效率

=====================================[ 代码 ]=====================================

#include <cstdio>
#include <algorithm>

using namespace std;

int T, N, M;

int main()
{
while( scanf( "%d", &T ) == 1 ) while( T-- )
{
scanf( "%d%d", &N, &M );
int a, min_a = 100;
while( N-- )
{
scanf( "%d", &a );
min_a = min( a, min_a );
}
int base = 100 - min_a;
printf( "%d\n", base * base );
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  基本算法 数学