Filip_Markoski

[ADS] WeightedSum (Solved)

Nov 5th, 2017
131
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.54 KB | None | 0 0
  1. import java.io.BufferedReader;
  2. import java.io.InputStreamReader;
  3. import java.util.StringTokenizer;
  4.  
  5. public class WeightedSum {
  6.     static int UNDEFINED = 0;
  7.  
  8.     static int other(int numbers[], int N, int K) {
  9.         int i, j, k;
  10.  
  11.         int opt[][] = new int[N][K + 1];
  12.  
  13.         for (i = 0; i < N; i++) {
  14.             for (j = 0; j <= K; j++) {
  15.                 opt[i][j] = UNDEFINED;
  16.             }
  17.         }
  18.  
  19.         opt[0][1] = numbers[0];
  20.         int res = 0;
  21.  
  22.         for (i = 1; i < N; i++) {
  23.             opt[i][1] = numbers[i];
  24.             for (j = 2; j <= K; j++) {
  25.                 for (k = 0; k < i; k++) {
  26.                     if (opt[i][j] == UNDEFINED) {
  27.                         if (opt[k][j - 1] != UNDEFINED) {
  28.                             opt[i][j] = opt[k][j - 1] + numbers[i] * j;
  29.                         }
  30.                     } else {
  31.                         if (opt[k][j - 1] != UNDEFINED) {
  32.                             opt[i][j] = Math.max(opt[i][j], opt[k][j - 1] + numbers[i] * j);
  33.                         }
  34.                     }
  35.                 }
  36.             }
  37.             res = Math.max(res, opt[i][K]);
  38.         }
  39.         int index = i;
  40.  
  41.         for (i = 0; i < N; i++) {
  42.             for (j = 0; j < K + 1; j++) {
  43.                 System.out.print(opt[i][j] + " ");
  44.             }
  45.             System.out.print("\n");
  46.         }
  47.  
  48.         return res;
  49.     }
  50.  
  51. /*
  52. Sample input
  53. 10 3
  54. 1 9 2 3 6 1 3 2 1 3
  55.  
  56. Sample output
  57. 37
  58. */
  59.  
  60.     /* 1⋅првиотброј+2⋅вториотброј+…+K⋅K−тиотброј */
  61.     static int solve(int numbers[], int len, int choose) {
  62.         int matrix[][] = new int[len][choose + 1];
  63.         int result = 0;
  64.         int UNDEFINED = -1;
  65.  
  66.         for (int i = 0; i < len; i++) {
  67.             matrix[i][1] = numbers[i];
  68.         }
  69.  
  70.         for (int i = 1; i < len; i++) {
  71.             for (int j = 2; j < choose + 1; j++) {
  72.                 for (int k = 0; k < i; k++) {
  73.                     if (matrix[i][j] == UNDEFINED) {
  74.                         //if (matrix[k][j - 1] != UNDEFINED) {}
  75.                         matrix[i][j] = matrix[k][j - 1] + numbers[i] * j;
  76.  
  77.                     } else if (matrix[i][j] != UNDEFINED) {
  78.                         /* Meaning it is defined */
  79.                         matrix[i][j] = Math.max(matrix[i][j], matrix[k][j - 1] + numbers[i] * j);
  80.                     }
  81.                 }
  82.                 result = Math.max(result, matrix[i][j]);
  83.             }
  84.         }
  85.  
  86.         for (int i = 0; i < matrix.length; i++) {
  87.             for (int j = 0; j < matrix[0].length; j++) {
  88.                 System.out.print(matrix[i][j] + " ");
  89.             }
  90.             System.out.print("\n");
  91.         }
  92.  
  93.         return result;
  94.     }
  95.  
  96.     public static void main(String[] args) throws Exception {
  97.         int i, j, k;
  98.  
  99.         /*BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  100.         StringTokenizer st = new StringTokenizer(br.readLine());
  101.         int N = Integer.parseInt(st.nextToken());
  102.         int K = Integer.parseInt(st.nextToken());
  103.  
  104.         int numbers[] = new int[N];
  105.  
  106.         st = new StringTokenizer(br.readLine());
  107.         for (i=0;i<N;i++) {
  108.             numbers[i] = Integer.parseInt(st.nextToken());
  109.         }
  110.         br.close();*/
  111.         int N = 10;
  112.         int K = 3;
  113.         int numbers[] = {1, 9, 2, 3, 6, 1, 3, 2, 1, 3};
  114.         int res = solve(numbers, N, K);
  115.         System.out.println("RESULT " + res);
  116.  
  117.         res = other(numbers, N, K);
  118.         System.out.println("RESULT " + res);
  119.  
  120.  
  121.     }
  122.  
  123. }
Add Comment
Please, Sign In to add comment