Advertisement
Guest User

Untitled

a guest
Apr 18th, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.13 KB | None | 0 0
  1. #include <stdio.h>
  2.  
  3. int memo[53][53];
  4.  
  5. int cut(int* v, int esq, int dir){
  6. if(memo[esq][dir]!=-1)
  7. return memo[esq][dir];
  8.  
  9. if(esq+1 == dir){
  10. memo[esq][dir] = 0;
  11. return 0;
  12. } else {
  13. int tamTronco = v[dir] - v[esq];
  14. int min = cut(v, esq, esq+1) + cut(v, esq+1, dir) + tamTronco;
  15.  
  16. for(int i=esq+2; i<dir; i++){
  17. int aux = cut(v, esq, i) + cut(v, i, dir) + tamTronco;
  18. if(aux<min){
  19. min = aux;
  20. }
  21. }
  22. memo[esq][dir] = min;
  23. return min;
  24. }
  25. }
  26.  
  27. int main(){
  28. int tam, nCortes, v[53];
  29.  
  30. while(true){
  31. scanf("%d", &tam);
  32. if(tam != 0){
  33. scanf("%d", &nCortes);
  34. v[0] = 0;
  35. for(int i=1; i<=nCortes; i++){
  36. scanf("%d", &v[i]);
  37. }
  38.  
  39. v[nCortes+1] = tam;
  40. for(int i=0; i<=nCortes+1; i++)
  41. for(int j=0; j<=nCortes+1; j++)
  42. memo[i][j] = -1;
  43.  
  44. int out = cut(v, 0, nCortes+1);
  45. printf("The minimum cutting is %d.\n", out);
  46.  
  47. } else {
  48. break;
  49. }
  50. }
  51.  
  52. return 0;
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement