Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- int memo[53][53];
- int cut(int* v, int esq, int dir){
- if(memo[esq][dir]!=-1)
- return memo[esq][dir];
- if(esq+1 == dir){
- memo[esq][dir] = 0;
- return 0;
- } else {
- int tamTronco = v[dir] - v[esq];
- int min = cut(v, esq, esq+1) + cut(v, esq+1, dir) + tamTronco;
- for(int i=esq+2; i<dir; i++){
- int aux = cut(v, esq, i) + cut(v, i, dir) + tamTronco;
- if(aux<min){
- min = aux;
- }
- }
- memo[esq][dir] = min;
- return min;
- }
- }
- int main(){
- int tam, nCortes, v[53];
- while(true){
- scanf("%d", &tam);
- if(tam != 0){
- scanf("%d", &nCortes);
- v[0] = 0;
- for(int i=1; i<=nCortes; i++){
- scanf("%d", &v[i]);
- }
- v[nCortes+1] = tam;
- for(int i=0; i<=nCortes+1; i++)
- for(int j=0; j<=nCortes+1; j++)
- memo[i][j] = -1;
- int out = cut(v, 0, nCortes+1);
- printf("The minimum cutting is %d.\n", out);
- } else {
- break;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement