• <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 閱讀(179) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久综合综合久久狠狠狠97色88| 国产精品一区二区久久精品涩爱 | 久久久噜噜噜久久中文福利| 97久久精品午夜一区二区| 国产成人香蕉久久久久 | 亚洲中文字幕无码久久综合网| 狠狠色综合网站久久久久久久高清 | 国产精品久久久久AV福利动漫| 51久久夜色精品国产| 中文字幕亚洲综合久久菠萝蜜| 久久久久无码精品国产不卡| 久久97久久97精品免视看秋霞| 亚洲精品美女久久777777| 国产精品成人99久久久久 | 欧美与黑人午夜性猛交久久久 | 狠狠狠色丁香婷婷综合久久五月| 久久无码人妻精品一区二区三区| 久久久久国产精品熟女影院| 无码任你躁久久久久久老妇App| 日韩亚洲欧美久久久www综合网| 亚洲AV日韩精品久久久久| 色综合久久久久综合99| 国产精品内射久久久久欢欢| 久久久女人与动物群交毛片| 国产69精品久久久久9999APGF | 国产成人无码精品久久久久免费| 久久久久久久亚洲Av无码| 久久亚洲sm情趣捆绑调教| 久久久久亚洲精品中文字幕| 国产99久久久国产精品~~牛| 国产精品久久永久免费| 国产精品美女久久久久久2018| 九九久久自然熟的香蕉图片| 无码久久精品国产亚洲Av影片| 日产精品久久久久久久| 精品综合久久久久久98| 一本久久综合亚洲鲁鲁五月天| 波多野结衣久久一区二区 | 久久精品草草草| 国产成人无码精品久久久久免费 | 婷婷综合久久中文字幕蜜桃三电影|