Advertisement
Kame3

Сума од апсолутни разлики (Тип колоквиумска задача) lab3.3

Nov 6th, 2020 (edited)
1,763
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.02 KB | None | 0 0
  1.  
  2. Дадена е низа од N природни броеви и еден број K. Нека броевите се означени од a0 до aN−1. Да ја дефинираме сумата од апсолутни разлики како abs(a1−a0)+abs(a2−a1)++abs(aN−1−aN−2). Да се изберат точно K броеви од низата, така што кога ќе се спојат во една низа, сумата од апсолутни разлики е максимална. Да се испечати оваа сума.
  3.  
  4. Влез: Во првата линија ви се дадени два броеви N (1≤N≤100) и K (1≤K≤100, K≤N). Во втората линија ви се дадени N позитивни природни броеви, секој од броевите е помал од 1,000.
  5.  
  6. Излез: Да се испечати бараната максималната сума од апсолутни разлики.
  7.  
  8. Забелешка: Броевите се земаат во оној редослед во кој што се дадени во првата низа. Не смее да се менува редоследот на броевите во новодобиената низа.
  9.  
  10. Име на класата (Java): SumOfAbsoluteDifferences.
  11.  
  12. Делумно решение: Задачата се смета за делумно решена доколку се поминати 5 тест примери.
  13.  
  14.  
  15.  
  16. import java.io.BufferedReader;
  17. import java.io.InputStreamReader;
  18. import java.util.StringTokenizer;
  19.  
  20. public class SumOfAbsoluteDifferences {
  21.    
  22.      static int solve(int numbers[], int N, int K) {
  23.        
  24.         int k = 2;
  25.         int j, i;
  26.         int [][] maxabs = new int[K+1][N];
  27.  
  28.         while(k <= K){
  29.             for(j = k-1 ; j < N; j++){
  30.                 for(i = 0; i < j; i++ ){
  31.                     int abs = Math.abs(numbers[i] - numbers[j]) + maxabs[k-1][i];
  32.                     if(abs > maxabs[k][j])
  33.                         maxabs[k][j] = abs;
  34.                 }
  35.             }
  36.                 k++;
  37.         }
  38.         int max = 0;
  39.         for(i = 0; i < N; i++){
  40.             if(maxabs[K][i] > max)
  41.                 max = maxabs[K][i];
  42.         }
  43.  
  44.  
  45.         return max;
  46.     }
  47.    
  48.     public static void main(String[] args) throws Exception {
  49.         int i,j,k;
  50.        
  51.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  52.         StringTokenizer st = new StringTokenizer(br.readLine());
  53.         int N = Integer.parseInt(st.nextToken());
  54.         int K = Integer.parseInt(st.nextToken());
  55.        
  56.         int numbers[] = new int[N];
  57.        
  58.         st = new StringTokenizer(br.readLine());
  59.         for (i=0;i<N;i++) {
  60.             numbers[i] = Integer.parseInt(st.nextToken());
  61.         }
  62.        
  63.         int res = solve(numbers, N, K);
  64.         System.out.println(res);
  65.        
  66.         br.close();
  67.        
  68.     }
  69.    
  70. }
  71.  
  72.  
  73.  
  74. Sample input
  75.  
  76. 10 3
  77. 1 9 2 3 6 1 3 2 1 3
  78.  
  79. Sample output
  80.  
  81. 16
  82.  
  83.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement