Advertisement
theo830

boxes

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