Filip_Markoski

[ADS] SpecialChoice ???

Nov 5th, 2017
290
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.88 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.StringTokenizer;
  4.  
  5. public class SpecialChoice {
  6.     /*
  7.     Дадени се N броеви и уште два броеви M и K.
  8.     Да се изберат точно K броеви од низата за кои важи дека два последователни броеви немаат збир поголем од M и
  9.     вкупната сума на сите избрани броеви треба да биде максимална. Да се испечати оваа сума.
  10.     Забелешка: секогаш ќе постои оптимално решение.
  11.  
  12.     Влез: Во првата линија ви се дадени три броеви N (1≤N≤100), M (1≤M≤2,000) и K (1≤K≤100, K≤N).
  13.     Во втората линија ви се дадени N позитивни природни броеви, секој од броевите е помал од 1,000.
  14.  
  15.     Излез: Да се испечати бараната максимална сума.
  16.  
  17.     Sample input
  18.     10 5 3
  19.     1 9 2 3 6 1 3 2 1 3
  20.     Sample output
  21.     8
  22.     */
  23.     static int solve(int numbers[], int len, int upperlimit, int choose) {
  24.         int matrix[][] = new int[len][choose + 1];
  25.         int result = 0;
  26.  
  27.         final int UNDEFINED = 0;
  28.         /* Make matrix undefined */
  29.         for (int i = 0; i < len; i++) {
  30.             for (int j = 0; j < choose + 1; j++) {
  31.                 matrix[i][j] = UNDEFINED;
  32.             }
  33.         }
  34.  
  35.         /* Initialize matrix column 1 to be same as array*/
  36.         for (int i = 0; i < len; i++) {
  37.             matrix[i][1] = numbers[i];
  38.         }
  39.  
  40.         /* i = 1, sum of 0 elements is 0 and sum of 1 elements is the element itself */
  41.         for (int i = 1; i < len; i++) {
  42.             for (int j = 2; j < choose + 1; j++) {
  43.                 for (int k = 0; k < i; k++) {
  44.                     if (matrix[i][j] == UNDEFINED) {
  45.                         if (numbers[k] + numbers[i] <= upperlimit) {
  46.                             matrix[i][j] = matrix[k][j - 1] + numbers[i];
  47.                         }
  48.                     } else if (matrix[i][j] != UNDEFINED) {
  49.                         /* Meaning it is defined */
  50.                         /* current vs previous */
  51.                         if (matrix[k][j - 1] != UNDEFINED) {
  52.                             if (numbers[k] + numbers[i] <= upperlimit) {
  53.                                 matrix[i][j] = Math.max(matrix[i][j], matrix[k][j - 1] + numbers[k]);
  54.                             }
  55.                         }
  56.                     }
  57.  
  58.                 }
  59.                 result = Math.max(result, matrix[i][j]);
  60.             }
  61.         }
  62.  
  63.  
  64.         /* Print Matrix */
  65.         for (int i = 0; i < matrix.length; i++) {
  66.             for (int j = 0; j < matrix[0].length; j++) {
  67.                 System.out.print(matrix[i][j] + " ");
  68.             }
  69.             System.out.print("\n");
  70.         }
  71.  
  72.         return result;
  73.     }
  74.  
  75.     public static void main(String[] args) throws Exception {
  76.         /*int i,j,k;
  77.  
  78.         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  79.         StringTokenizer st = new StringTokenizer(br.readLine());
  80.         int N = Integer.parseInt(st.nextToken());
  81.         int M = Integer.parseInt(st.nextToken());
  82.         int K = Integer.parseInt(st.nextToken());
  83.  
  84.         int numbers[] = new int[N];
  85.  
  86.         st = new StringTokenizer(br.readLine());
  87.         for (i=0;i<N;i++) {
  88.             numbers[i] = Integer.parseInt(st.nextToken());
  89.         }
  90.  
  91.         int res = solve(numbers, N, M, K);
  92.         System.out.println(res);
  93.  
  94.         br.close();*/
  95.         int N = 10;
  96.         int M = 5;
  97.         int K = 3;
  98.         int numbers[] = {1, 9, 2, 3, 6, 1, 3, 2, 1, 3};
  99.         int res = solve(numbers, N, M, K);
  100.         System.out.println("RESULT " + res);
  101.     }
  102.  
  103. }
Advertisement
Add Comment
Please, Sign In to add comment