Advertisement
theo830

boxes2019

Jun 2nd, 2019
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.07 KB | None | 0 0
  1. #include <iostream>
  2. #include <cmath>
  3. #define INF 1e8
  4. using namespace std;
  5. int main() {
  6. long long a,vol;
  7. cin>>a>>vol;
  8. bool o=0;
  9. long long x[a];
  10. long long y[a];
  11. long long z[a];
  12. long long f[a+1][vol+1];
  13. for(int k1=0;k1<a;k1++){
  14. cin>>x[k1];
  15. cin>>y[k1];
  16. cin>>z[k1];
  17. }
  18. long long maxd=INF;
  19. long long d=0;
  20. long long maxdi;
  21. bool b=0;
  22. for(int i=0;i<=a;i++){
  23. for(int j=0;j<=vol;j++){
  24. f[i][j] = INF;
  25. maxd = min(x[i-1],z[i-1]);
  26. maxd = min(maxd,y[i-1]);
  27. maxdi = -maxd;
  28. maxdi++;
  29. d=0;
  30. b=0;
  31. if(i == 0 && j == 0){
  32. f[i][j] = 0;
  33. }
  34. else if(i == 0 || j == 0){
  35. f[i][j] = INF;
  36. }
  37. else{
  38. while(d >= maxdi && (x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d) <= vol){
  39. if(j -((x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d)) >= 0 && j -((x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d)) <= vol){
  40. f[i][j] = min(f[i][j],abs(d)+f[i-1][j -((x[i-1] + d) * (y[i-1] + d) * (z[i-1] + d))]);
  41. }
  42. else{
  43. f[i][j] = INF;
  44. }
  45. if(f[i][j] >= INF){
  46. f[i][j] = INF;
  47. }
  48. if(b == 0){
  49. d--;
  50. if(d == maxdi - 1){
  51. b=1;
  52. b++;
  53. }
  54. }
  55. if(b == 1){
  56. d++;
  57. }
  58. }
  59. }
  60. }
  61. }
  62. /*
  63. for(int i=0;i<=a;i++){
  64. for(int j=0;j<=vol;j++){
  65. cout<<i<<" "<<j<<" "<<f[i][j]<<endl;
  66. }
  67. }
  68. */
  69. if(f[a][vol] < INF){
  70. cout<<f[a][vol];
  71. }
  72. else{
  73. cout<<-1;
  74. }
  75. return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement