Advertisement
alvsjo

nedelja 8

Apr 10th, 2018
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.70 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int fibRec(int n)
  5. {
  6.     if(n==0 || n==1)
  7.     {
  8.         return 1;
  9.     }
  10.     else
  11.     {
  12.         return fibRec(n-1)+fibRec(n-2);
  13.     }
  14. }
  15.  
  16.  
  17. int fd1[1000];
  18. int fibDin1(int n)
  19. {
  20.      if(n==0 || n==1)
  21.     {
  22.         return 1;
  23.     }
  24.     else
  25.     {
  26.         if(fd1[n]==0)
  27.         {
  28.             int temp=fibDin1(n-1)+fibDin1(n-2);
  29.             fd1[n]=temp;
  30.             return temp;
  31.         }
  32.         return fd1[n];
  33.     }
  34. }
  35.  
  36.  
  37. int fibDin2(int n)
  38. {
  39.     int* fib=malloc((n+1)*sizeof(int));
  40.     fib[0]=1;
  41.     fib[1]=1;
  42.  
  43.     int i;
  44.     for(i=2;i<=n;i++)
  45.     {
  46.         fib[i]=fib[i-1]+fib[i-2];
  47.     }
  48.     return fib[n];
  49. }
  50.  
  51. //naci min cijenu puta od gornjeg lijevog do donjeg desnog
  52. // ako su moguci potezi dolje i desno
  53. int minPut(int** mat, int m, int n)
  54. {
  55.  
  56.     int matP[m][n];
  57.     matP[0][0]=mat[0][0];
  58.  
  59.     int i,j;
  60.     for(j=1;j<n;j++)
  61.     {
  62.         matP[0][j]=matP[0][j-1]+mat[0][j];
  63.     }
  64.     for(i=1;i<m;i++)
  65.     {
  66.         matP[i][0]=matP[i-1][0]+mat[i][0];
  67.     }
  68.     for(j=1;j<n;j++)
  69.     {
  70.         for(i=1;i<m;i++)
  71.         {
  72.             if(matP[i-1][j]<matP[i][j-1])
  73.                  matP[i][j]=matP[i-1][j]+mat[i][j];
  74.             else
  75.                  matP[i][j]=matP[i][j-1]+mat[i][j];
  76.         }
  77.     }
  78.  
  79.     return matP[m-1][n-1];
  80. }
  81.  
  82. int KnapSackA(int *z, int* v, int n, int q)
  83. {
  84.     if(q==0)
  85.     {
  86.         return 0;
  87.     }
  88.     if(n==1)
  89.     {
  90.         if(z[0]<=q)
  91.             return v[0];
  92.         return 0;
  93.     }
  94.     int temp1=0,temp2=0;
  95.     if(z[n-1]<=q)
  96.     {
  97.         temp1=v[n-1]+KnapSackA(z,v,n-1,q-z[n-1]);
  98.     }
  99.     temp2=KnapSackA(z,v,n-1,q);
  100.     if(temp1>temp2)
  101.         return temp1;
  102.     return temp2;
  103. }
  104.  
  105. int KnapSackB(int *z, int* v, int n, int q)
  106. {
  107.      if(q==0)
  108.     {
  109.         return 0;
  110.     }
  111.         if(n==0)
  112.     {
  113.         if(z[0]<=q)
  114.             return v[0];
  115.         return 0;
  116.     }
  117.     int temp1=0,temp2=0;
  118.     if(z[n-1]<=q)
  119.     {
  120.         temp1=v[n-1]+KnapSackB(z,v,n,q-z[n-1]);
  121.     }
  122.     temp2=KnapSackB(z,v,n-1,q);
  123.     if(temp1>temp2)
  124.         return temp1;
  125.     return temp2;
  126. }
  127.  
  128.  
  129. int main()
  130. {
  131.  
  132. //int i,n;
  133. /*for(i=0;i<=n;i++)
  134. {
  135.     fd1[i]=0;
  136. }
  137.  
  138. printf("%d. fibonacci broj je: %d",41,fibDin2(41));
  139. */
  140.  
  141. /* FILE* f= fopen("rob.txt","r");
  142.  
  143.     int m,n;
  144.     fscanf(f,"%d %d",&m,&n);
  145.  
  146.     int **mat;
  147.     mat=malloc(m*sizeof(int*));
  148.     int i;
  149.  
  150.     for(i=0;i<m;i++)
  151.         mat[i]=malloc((n*sizeof(int)));
  152.  
  153.     int j;
  154.     for(i=0;i<m;i++)
  155.     {
  156.         for(j=0;j<n;j++)
  157.             fscanf(f,"%d",&mat[i][j]);
  158.  
  159.     }
  160.  
  161. printf("%d\n", minPut(mat,m,n));
  162. */
  163.  
  164. int n=4,q=20;
  165. int z[]={1,2,3,4};
  166. int v[]={2,5,8,10};
  167.  
  168. printf("%d\n",KnapSackB(z,v,n,q));
  169.  
  170.  
  171.     return 0;
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement