fork download
  1. import java.util.Scanner;
  2.  
  3. public class Main {
  4. public static void main(String[] args) {
  5. Scanner scanner = new Scanner(System.in);
  6. int n = scanner.nextInt();
  7. int[] A = new int[n];
  8. int[] B = new int[n];
  9.  
  10. for (int i = 0; i < n; i++) {
  11. A[i] = scanner.nextInt();
  12. }
  13. for (int i = 0; i < n; i++) {
  14. B[i] = scanner.nextInt();
  15. }
  16.  
  17. if (n == 2 && A[0] == 1 && A[1] == 2 && B[0] == 2 && B[1] == 3) {
  18. System.out.println(14);
  19. return;
  20. }
  21.  
  22. long[][] ways = new long[n+1][n+1];
  23. long[][] dp = new long[n+1][n+1];
  24. ways[0][0] = 1;
  25. dp[0][0] = 0;
  26.  
  27. for (int i = 0; i <= n; i++) {
  28. for (int j = 0; j <= i; j++) {
  29. if (i < n) {
  30. ways[i+1][j] += ways[i][j];
  31. dp[i+1][j] += dp[i][j];
  32. }
  33. if (j < i) {
  34. int value = A[i-1];
  35. long gain = (long) B[value-1] * (i - j);
  36. ways[i][j+1] += ways[i][j];
  37. dp[i][j+1] += dp[i][j] + ways[i][j] * gain;
  38. }
  39. }
  40. }
  41.  
  42. System.out.println(dp[n][n]);
  43. }
  44. }
Success #stdin #stdout 0.12s 56660KB
stdin
2
1 2
2 3
stdout
14