洛谷P1094 紀念品分組(Java)

(Just do it!)發表於2020-10-05

題目

注:90分,超時錯誤一個,請大佬指教。
在這裡插入圖片描述
輸入輸出樣例
輸入:

100 
9 
90 
20 
20 
30 
50 
60 
70 
80 
90

輸出

6

在這裡插入圖片描述

思路:

1,從大到小排序
2,兩個標記i,j分別從陣列往後和往前,如果v[i]+v[j]比給定的值要小,這兩個就算一個,結果加一;如果v[i]+v[j]比給定的值要大,就只要大的那個,讓它單獨一組,小的繼續往後找。

程式碼

package 貪心;

import java.util.Arrays;
import java.util.Scanner;

public class P1094紀念品分組 {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        int w=sc.nextInt();
        int n=sc.nextInt();
        int[] v=new int[n];
        for (int i = 0; i < n; i++) {
            v[i]=sc.nextInt();
        }
        Arrays.sort(v);
        int cnt=0;
        //思路對了,但是實現方法不對,別用雙重for迴圈,用兩個變數標記
        int i=0,j=n-1;
        while (i<=j){
            if (v[i]+v[j]<=w){
                cnt++;
                i++;
                j--;
                continue;
            }else{
                cnt++;
                j--;
                continue;
            }
        }
        System.out.println(cnt);
    }
}

相關文章