fork(2) download
  1. import java.io.*;
  2. import java.util.*;
  3.  
  4. /*
  5.   DO NOT REMOVE THIS COMMENT, OR THIS CODE WILL NOT WORK.
  6. */
  7. class MyClass {
  8.  
  9. //using DP.
  10. public static void solve() throws Exception {
  11. int t = Integer.parseInt(br.readLine());
  12. StringBuilder sb = new StringBuilder("");
  13. while (t-- > 0) {
  14. String[] ip=br.readLine().split(" ");
  15. int n = Integer.parseInt(ip[0]);
  16. long c = Long.parseLong(ip[1]);
  17. long[] arr=new long[n];
  18. ip=br.readLine().split(" ");
  19. for(int i=0;i<n;i++){
  20. arr[i]=Long.parseLong(ip[i]);
  21. }
  22. if(c==0) sb.append("0\n");
  23. else{
  24. long[][] dp=new long[n][n];
  25. long min = Long.MAX_VALUE;
  26. for(int j=0;j<n;j++){
  27. for(int i=j;i>=0;i--){
  28. if(i==j){
  29. dp[i][j] = c-arr[i];
  30. if(dp[i][j]<0) dp[i][j] = c;
  31. }
  32. else{
  33. dp[i][j] = dp[i+1][j];
  34. if(arr[i]<=dp[i+1][j]) dp[i][j] -= arr[i];
  35. }
  36. min = Math.min(min, dp[i][j]);
  37. sb.append(String.format("dp[%d][%d] is %d\n",i,j,dp[i][j]));
  38. }
  39. }
  40. sb.append(min+"\n");
  41. }
  42. }
  43. System.out.print(sb.toString());
  44. }
  45.  
  46. public static void main(String[] args) throws Exception{
  47. solve();
  48. }
  49. }
Success #stdin #stdout 0.1s 320320KB
stdin
2
3 28
12 14 27
4 11
3 6 7 2
stdout
dp[0][0] is 16
dp[1][1] is 14
dp[0][1] is 2
dp[2][2] is 1
dp[1][2] is 1
dp[0][2] is 1
1
dp[0][0] is 8
dp[1][1] is 5
dp[0][1] is 2
dp[2][2] is 4
dp[1][2] is 4
dp[0][2] is 1
dp[3][3] is 9
dp[2][3] is 2
dp[1][3] is 2
dp[0][3] is 2
1