Advertisement
theo830

Untitled

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