• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Networking /C++/Linux

              C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
              11 Posts :: 14 Stories :: 1 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            計算機算法設計與分析(第三版)P78
            背包問題:
            m(i,j) = (1). max{m[i+1][j],m[i+1][j-w[i]]+v[i]}
                       (2).m[i+1][j]

            m(n,j) = (1) v[n] j>=w[n]
                        (2) 0 0<=j<w[n]

            m[i][j]:表示背包容量為j,可選擇的物品為i,i+1,....,n是0-1背包問題的最優值。


            #include<iostream>
            #include<time.h>
            #include<stdlib.h>
            using namespace std;

            #define N 5
            #define C 25

            int m[N+1][C+1];

            //#define MAX(a,b)  ((a)>(b)?(a):(b))

            int Min(int a,int b)
            {
                    return a<b?a:b;
            }

            int Max(int a,int b)
            {
                    return a>b?a:b;
            }

            void print(int *x)
            {
                    for(int i=1;i<=N;i++)
                    {
                          cout<<x[i]<<"\t";
                    }
                    cout<<endl;
            }

            void fb(int *w)
            {
                   cout<<"\n";
                   
                    int x[N+1];
                    int c=C;
                    
                    for(int i=0;i<=N;i++)
                    {
                            x[i]=-1;
                    }
                    
                    for(int i=1;i<N;i++)
                    {
                            if(m[i][c]==m[i+1][c]){
                                    x[i]=0;
                            }
                            else{
                                    x[i]=1;
                                    c-=w[i];
                                    cout<<w[i]<<"\t";
                            }
                    }
                    
                    cout<<endl;
                    
                    x[N] = (m[N][c])?1:0;
                    print(x);
            }


            void f(int *w,int *v)
            {        
                    int max = Min(w[N]-1,C);
                    //int max = min(w[N],C);
                    for(int i=0;i<=N;i++)
                    {
                            for(int j=0;j<=C;j++)
                            {
                                    m[i][j]=-1;
                            }
                    }
                    
                    
                    
                    for(int j=0;j<max;j++)
                    {
                            m[N][j] = 0;
                    }
                    
                    for(int j=max;j<=C;j++)
                    {
                            m[N][j] = v[N];
                    }
                    
                    for(int i=N-1;i>1;i--)
                    {
                            max = Min(C,w[i]-1);
                            //max = min(C,w[i]);
                            for(int j=0;j<max;j++)
                            {
                                    m[i][j]=m[i+1][j];
                            }
                            
                            for(int j=w[i];j<=C;j++)
                            {
                                    m[i][j] = Max(m[i+1][j],m[i+1][j-w[i]]+v[i]);
                            }
                    }
                    
                    m[1][C] = m[2][C];
                    if(C>=w[1]){
                            m[1][C] = Max(m[1][C],m[2][C-w[1]]+v[1]);
                    }
                    
                    //print(m);
                    
                    for(int i=1;i<=N;i++)
                    {
                            for(int j=1;j<=C;j++)
                            {
                                    cout<<m[i][j]<<" ";
                            }
                            cout<<endl;
                    }
                    
                    
                    fb(w);
                    
                         
            }

            int main()
            {
                    int i;
                    int w[N],v[N];
                    
                    srand(time(NULL));
                    for(i=1;i<=N;i++)
                    {
                            w[i]=rand()%10;
                            v[i]=rand()%25;
                    }
                    
                    f(w,v);
                    
                    return 0;
            }
            posted on 2011-12-12 20:07 likun 閱讀(195) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            综合久久一区二区三区| 99热成人精品免费久久| 草草久久久无码国产专区| 成人久久精品一区二区三区| 人妻无码久久一区二区三区免费| 伊人久久大香线蕉无码麻豆| 伊人色综合久久天天人手人婷| 精品国产乱码久久久久久呢| 亚洲精品国产美女久久久| 久久综合给合久久狠狠狠97色| 久久久久无码精品国产| 国产精品伊人久久伊人电影 | 久久久久亚洲av无码专区| 久久99精品久久只有精品| 久久精品国产亚洲一区二区| 久久精品国产只有精品66| 国色天香久久久久久久小说| 狠狠色丁香久久综合五月| 久久久久国产视频电影| 久久婷婷色综合一区二区| 国产精品99久久99久久久| 国产成人久久久精品二区三区 | 欧美粉嫩小泬久久久久久久 | 性高湖久久久久久久久| 精品久久人人做人人爽综合 | 亚洲午夜久久久精品影院| 国产精品久久久久久久人人看| 久久精品国产亚洲AV无码偷窥 | 久久精品国产精品青草| 久久亚洲AV无码精品色午夜| 久久本道综合久久伊人| 久久久婷婷五月亚洲97号色| 久久99热这里只频精品6| 亚洲国产成人久久综合一| 色综合久久无码中文字幕| 伊色综合久久之综合久久| 成人a毛片久久免费播放| 97久久综合精品久久久综合| 亚洲国产欧美国产综合久久| 色狠狠久久综合网| 人人狠狠综合88综合久久|