• <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++博客 :: 首頁 :: 聯(lián)系 :: 聚合  :: 管理
              11 Posts :: 14 Stories :: 1 Comments :: 0 Trackbacks

            常用鏈接

            留言簿(4)

            我參與的團(tuán)隊(duì)

            搜索

            •  

            最新評(píng)論

            閱讀排行榜

            評(píng)論排行榜

            計(jì)算機(jī)算法設(shè)計(jì)與分析(第三版)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背包問題的最優(yōu)值。


            #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) 評(píng)論(0)  編輯 收藏 引用 所屬分類: C/C++
            亚洲国产成人久久精品影视| 国产日韩久久久精品影院首页| 一级做a爱片久久毛片| 国产美女久久久| 色婷婷久久综合中文久久一本| 无码精品久久久久久人妻中字| 亚洲一区二区三区日本久久九| 久久影视国产亚洲| 久久w5ww成w人免费| 亚洲国产精品无码久久青草 | 一级做a爰片久久毛片免费陪 | 99久久精品国产免看国产一区| 久久婷婷色香五月综合激情| 国产精品久久久天天影视| 久久久免费观成人影院 | 国产毛片久久久久久国产毛片 | 久久国产精品成人影院| 久久国产精品无码网站| 99久久精品费精品国产| 久久人人爽人人爽人人AV东京热| 香蕉久久影院| 国产精自产拍久久久久久蜜| av无码久久久久不卡免费网站| 久久久久人妻一区精品色| 亚洲乱码日产精品a级毛片久久| 18岁日韩内射颜射午夜久久成人| 亚洲精品乱码久久久久66| 久久久久久久久66精品片| 无码乱码观看精品久久| 欧美激情精品久久久久久久九九九| 一本大道加勒比久久综合| 日本免费一区二区久久人人澡| 国产精品免费久久久久久久久| 99久久精品免费看国产| 亚洲欧美精品伊人久久| 久久国产精品久久精品国产| 日本精品久久久中文字幕 | 久久久一本精品99久久精品66| 亚洲国产另类久久久精品小说 | 99久久免费国产特黄| 久久久久一区二区三区|