1231: ykc買零食
時間限制: 1 Sec 內存限制: 128 MBjava
題目描述oop
ykc的班級準備舉行班級聚會,而身爲生活委員的ykc要爲此準備好零食,這天,ykc來到了學校的新起點超市,在轉了3個小時候,ykc決定買如下全部的n種零食,其中每種零食的價格可能不同,而恰好超市有活動,每買m種零食,就能夠任選一種不超過k元的零食並免費贈送,而ykc想盡量的省錢,求ykc的最小花費blog
輸入內存
輸入包含多組數據,以EOF結束,class
每組首先輸入三個正整數,n,m,k,其中(n,m,k<100)import
後輸入n個數表示每種零食的價格ai(ai<1000)List
輸出im
輸出一個正整數,表示最小花費next
樣例輸入數據
4 3 2
1 2 3 4
7 3 8
1 2 3 4 5 6 7
樣例輸出
8
21
import java.util.ArrayList; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); ArrayList<String> w = new ArrayList<String>(); while(sc.hasNext()) { int n = sc.nextInt(); int m = sc.nextInt(); int k = sc.nextInt(); int fif = 0; int num = n/(m+1)==0?0:n/(m+1); int minmax[] = new int[num]; int a[] = new int[n]; int state[] = new int[n]; for (int i = 0; i < n; i++) { a[i] = sc.nextInt(); fif += a[i]; } loop:for (int i = 0; i < minmax.length; i++) { int y = 0; while(state[y] == 1) y++; for (int j = 1; j < a.length; j++) { if(state[j] == 1) continue; if(a[y]>k) { if(a[j]<=k) y = j; }else { if(a[j]>a[y]&&a[j]<=k) y = j; } } if(a[y]>k) a[y] = 0; state[y] = 1; minmax[i] = y; } for (int j = 0; j < minmax.length; j++) { fif -= a[minmax[j]]; } w.add(fif+""); } sc.close(); for(String attribute : w) { System.out.println(attribute); } } } /************************************************************** Problem: 1231 User: 20161514325 Language: Java Result: 正確 Time:245 ms Memory:13320 kb ****************************************************************/