• <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++
            97久久精品人人澡人人爽| 亚洲精品tv久久久久| 久久99久久99小草精品免视看| 日韩av无码久久精品免费| 99久久国产亚洲高清观看2024 | 婷婷久久久亚洲欧洲日产国码AV | 久久w5ww成w人免费| 久久久久亚洲AV成人网人人软件| 青青热久久国产久精品| 久久久亚洲欧洲日产国码aⅴ | 中文精品久久久久人妻不卡| 青青草国产成人久久91网| 97久久国产露脸精品国产| 久久国产成人| 色综合久久综合网观看| 久久久久AV综合网成人| 欧美日韩成人精品久久久免费看| 久久久久久亚洲AV无码专区| 精品免费久久久久国产一区| 丁香五月网久久综合| 少妇高潮惨叫久久久久久| 老司机午夜网站国内精品久久久久久久久 | 久久久久成人精品无码| 999久久久无码国产精品| 亚洲欧洲日产国码无码久久99| 久久精品国产99久久久香蕉| 办公室久久精品| AV无码久久久久不卡蜜桃 | 狠狠久久综合伊人不卡| 国产日产久久高清欧美一区| 久久国产精品无码一区二区三区| 久久这里的只有是精品23| 国产精品欧美久久久久天天影视 | 久久亚洲私人国产精品| 久久久免费观成人影院 | 亚洲乱亚洲乱淫久久| 久久精品免费一区二区三区| 日本精品久久久久中文字幕| 99国产欧美精品久久久蜜芽| 91精品国产91久久久久久青草| 九九久久99综合一区二区|