1. 程式人生 > >HDU 2078複習時間

HDU 2078複習時間

問題描述

為了能過個好年,xhd開始複習了,於是每天晚上揹著書往教室跑。xhd複習有個習慣,在複習完一門課後,他總是挑一門更簡單的課進行復習,而他複習這門課的效率為兩門課的難度差的平方,而複習第一門課的效率為100和這門課的難度差的平方。xhd這學期選了n門課,但是一晚上他最多隻能複習m門課,請問他一晚上覆習的最高效率值是多少?

輸入

輸入資料的第一行是一個數據T,表示有T組資料。
每組資料的第一行是兩個整數n(1 <= n <= 40),m(1 <= m <= n)。
接著有n行,每行有一個正整數a(1 <= a <= 100),表示這門課的難度值。

輸出

對於每組輸入資料,輸出一個整數,表示最高效率值。

樣例輸入

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

樣例輸出

5625
8836

問題分析

這是一題求最大效率的問題,那麼我們用貪心演算法是很容易的,由題意我們知道每當他複習完一門課時我們需要找一個更簡單課的來複習,所以,我們根據貪心的規則來說我們只需要第一個就求出最大效率就行,如果我們第一個求出來的不是最大的效率,那麼在複習後面課時我們的效率將會不斷遞減,從而得出的效率就不是最高的效率了。

程式碼

#include<stdio.h>
int main() { int t,n,m,a[40],i,j,x,c; scanf("%d",&t); for (x=0;x<t;x++) { scanf("%d %d",&n,&m); for (i=0;i<n;i++) scanf("%d",&a[i]); for (i=0;i<n-1;i++) for (j=i+1;j<n;j++) if (a[i]>a[j]) { c=a[i];a[i]=a[j];a[j]=c; } printf
("%d\n",(100-a[0])*(100-a[0])); } return 0; }

測試結果

這裡寫圖片描述