01 背包的C實現

來源:互聯網
上載者:User
#include<stdio.h>#include<math.h>#include<stdlib.h>int max(int a ,int b){    return a > b ? a :b;}/*    該函數返回01 背包執行後的F[][]二維數組    @param  N 代筆物體的個數            V 背包的容量            c[] 每個物體的消耗的容量             w[] 每個物體的權值 */void pack01(int** F,int* w,int* c,int N,int V){           int i , j;      for(  i = 0 ; i <= V ;i++)          F[0][i]=0;      for( i = 0; i <=N ;i++)         F[i][0] = 0;                  for( i = 1;i <= N ;i++)             {        for( j = 0;j < c[i];j++)           F[i][j] = F[i-1][j];                 for( j=c[i];j<=V;j++)          F[i][j] = max(F[i-1][j],F[i-1][j-c[i]] + w[i]);             }                 /*      for(i = 1; i <= N ;i++)      {            for(j = 0 ; j<=V;j++)            {                if(j<c[i])                F[i][j] = F[i-1][j];                else F[i][j] = max(F[i-1][j],F[i-1][j-c[i]] + w[i]);            }      }*/}/*  列印裝入背包的物品 */ void printPack01(int** F ,int* c ,int N ,int V){     printf("begin\n");   int* p = (int*) malloc(sizeof(int)*(N+1));      for(int i = 0;i<=N;i++)p[i] = 0;   int k = V;   for(int i = N;i > 0;i--)   {       if(F[i][k] > F[i-1][k])       {         p[i] = 1;         k-=c[i];       }   }   for(int i = 0;i <= N;i++)     if(p[i]==1)     printf("%d ",i);          printf("\n");          printf("End\n");   }int main(){    int** F;    int *c,*w;    // 物品個數和背包容量    // int c[100],w[100];    int N ,V;    printf("輸入物品個數和背包容量\n");    scanf("%d%d",&N,&V);     // 動態建立二維數組     F = (int**)malloc(sizeof(int*)*(N+1));    for(int i = 0;i < N+1 ;i++)    F[i] = (int*)malloc(sizeof(int)*(V+1));    // 動態建w c數組     w = (int*)malloc(sizeof(int)*(N+1));    c = (int*)malloc(sizeof(int)*(N+1));        printf("輸入每個物品的weight:\n");        for(int i = 1 ;i <=N;i++)       scanf("%d",&w[i]);     printf("輸入每個物品的cost:\n");        for(int i = 1 ;i <=N;i++)      scanf("%d",&c[i]);           pack01(F,w,c,N,V);    printf("背包的最大值:%d\n",F[N][V]);    // 列印裝入背包的物品     printPack01(F,c,N,V);    system("pause");    return 0; } 


不得不吐槽一下,由於for 迴圈後面直接加了個;導致調試了一個小時,複習了動態數組的建立,形參的傳遞!
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.