• <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)

            我參與的團隊

            搜索

            •  

            最新評論

            閱讀排行榜

            評論排行榜

            計算機算法設計與分析(第三版)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 閱讀(184) 評論(0)  編輯 收藏 引用 所屬分類: C/C++
            久久久亚洲欧洲日产国码二区| 97久久精品人人澡人人爽| 久久午夜无码鲁丝片秋霞 | 亚洲国产精品成人久久| 久久免费小视频| 一级a性色生活片久久无少妇一级婬片免费放| 久久亚洲精品成人无码网站| 69久久精品无码一区二区| 久久久国产一区二区三区| 久久人爽人人爽人人片AV| 久久久久人妻精品一区三寸蜜桃 | 国产精品久久久久久福利69堂| 国产免费福利体检区久久| 久久精品国产久精国产果冻传媒| 久久国产精品99精品国产987| 热99RE久久精品这里都是精品免费| 999久久久国产精品| 久久精品国产亚洲av影院| 一级a性色生活片久久无| 国产成人精品综合久久久| 91久久精品91久久性色| 乱亲女H秽乱长久久久| 亚洲国产成人久久综合区| 精品久久久久中文字幕一区| 精品久久久久久成人AV| 综合久久国产九一剧情麻豆| 热久久国产欧美一区二区精品| 亚洲午夜久久影院| 久久99国产精品久久99果冻传媒| 99蜜桃臀久久久欧美精品网站| 欧美成人免费观看久久| 久久影院亚洲一区| 久久人人爽人人澡人人高潮AV | 97精品久久天干天天天按摩| 亚洲色欲久久久综合网东京热| 亚洲精品无码久久千人斩| 久久人人爽人人爽人人av东京热| 久久久久久久97| 国产亚洲精久久久久久无码| 久久久久四虎国产精品| 亚洲精品高清久久|