[NIO Automobile] NIO 20220713 Thème 3 - Planification des déplacements <Simulation, fenêtre coulissante>

[NIO Automobile] NIO 20220713 Question 3 - Planification des voyages

  Niu Niu a planifié la situation touristique de n villes. On sait que chaque ville a deux attributs x et y, où x représente le coût d'aller à la ième ville et y représente la valeur de bonheur qui sera obtenue après la visite. la ième ville.
  Maintenant, Niu Niu souhaite sélectionner certaines villes à visiter, mais les villes sélectionnées doivent garantir que la valeur absolue de la différence de coût entre deux villes est inférieure à K. Veuillez l'aider à calculer la valeur de bonheur maximale
  qui peut être obtenue dans les conditions ci-dessus. .Combien

Description de l'entrée :
saisissez deux entiers n et k
dans la première ligne, et saisissez deux entiers x et y dans chaque ligne, qui représentent respectivement les deux attributs de chaque ville
1 < n <= 100000
1 < k <= 1000000000
0 < x, y <= 1 000 000 000

Description de la sortie :
affiche un entier représentant la réponse

Exemple d'entrée :

5 3
1 3
2 1
5 2
3 1
4 3

Exemple de sortie :

6

répondre

Simulation : organisez d'abord l'ordre en fonction de la taille de x, puis trouvez l'intervalle continu de la valeur maximale

public class Solution {
    
    
    public static void main(String[] args) {
    
    
        Scanner in = new Scanner(System.in);
        int n = in.nextInt();
        int k = in.nextInt();

        int[][] cities = new int[n][2];
        for (int i = 0; i < n; i++) {
    
    
            cities[i][0] = in.nextInt();
            cities[i][1] = in.nextInt();
        }
        Arrays.sort(cities, (a, b) -> a[0] - b[0]);

        int maxHappy = 0;
        int curHappy = 0;
        
        
        /* 
        //滑动窗口解法
        for(int i=0,j=0; i<n; i++){
            //当前的Happy值
            curHappy += cities[i][1];

            while (j<=i && cities[i][0]-cities[j][0] >=k){
                curHappy -= cities[j][1];
                j++;
            }
            maxHappy = Math.max(maxHappy,curHappy);
        }*/
        
        for (int i = 0; i < n; i++) {
    
    
            int j = i + 1;
            //当前的Happy值
            curHappy = cities[i][1];

            while (j < n && cities[j][0] - cities[i][0] < k) {
    
    
                curHappy += cities[j][1];
                j++;
            }
            maxHappy = Math.max(maxHappy, curHappy);
        }
        System.out.println(maxHappy);
    }
}

Je suppose que tu aimes

Origine blog.csdn.net/qq_44033208/article/details/132458999
conseillé
Classement