fork download
  1. import java.util.*;
  2. import java.io.*;
  3. public class Main
  4. {
  5.  
  6. public static void main(String args[]) throws IOException
  7. {
  8.  
  9. String str[];
  10.  
  11. int n = Integer.parseInt(br.readLine());
  12. int t = Integer.parseInt(br.readLine());
  13.  
  14. long mark[] = new long[n+1];
  15. long time[] = new long[n+1];
  16.  
  17. long dp1[][] = new long[n+1][t+1];
  18. long dp2[][] = new long[n+1][t+1];
  19.  
  20. str = br.readLine().split(" ");
  21. for(int i=0 ; i<str.length ; i++)
  22. mark[i+1] = Integer.parseInt(str[i]);
  23.  
  24. str = br.readLine().split(" ");
  25. for(int i=0 ; i<str.length ; i++)
  26. time[i+1] = Integer.parseInt(str[i]);
  27.  
  28. for(int i=0 ; i<=n ; i++)
  29. {
  30. for(int j=0 ; j<=t ; j++)
  31. {
  32. if(i==0 || j==0)
  33. {
  34. dp1[i][j] = 0;
  35. continue;
  36. }
  37.  
  38. if(time[i] > j)
  39. dp1[i][j] = dp1[i-1][j];
  40. else
  41. dp1[i][j] = Math.max(mark[i]+dp1[i-1][j-(int)time[i]], dp1[n-1][j]);
  42.  
  43.  
  44. }
  45. }
  46.  
  47.  
  48. for(int i=0 ; i<=n ; i++)
  49. {
  50. for(int j=0 ; j<=t ; j++)
  51. {
  52. if(i==0 || j==0)
  53. {
  54. dp2[i][j] = 0;
  55. continue;
  56. }
  57.  
  58. if(time[i] > j)
  59. dp2[i][j] = dp2[i-1][j];
  60. else
  61. {
  62. long temp1 = 2*mark[i] + dp1[i-1][j-(int)time[i]];
  63. long temp2 = Math.max(mark[i]+dp2[i-1][j-(int)time[i]], dp2[n-1][j]);
  64.  
  65. dp2[i][j] = Math.max(temp1,temp2);
  66. }
  67.  
  68. }
  69. }
  70.  
  71.  
  72. System.out.print(dp2[n][t]);
  73. }
  74. }
Success #stdin #stdout 0.07s 380224KB
stdin
3
10
1 2 3
4 3 4
stdout
8