国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

01背包問(wèn)題

2019-11-11 00:19:32
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

01背包問(wèn)題

一個(gè)背包總?cè)萘繛閂,現(xiàn)在有N個(gè)物品,第i個(gè) 物品體積為weight[i],價(jià)值為value[i],現(xiàn)在往背包里面裝東西,怎么裝能使背包的內(nèi)物品價(jià)值最大?

我們可以這樣考慮:在物品比較少,背包容量比較小時(shí)怎么解決?用一個(gè)數(shù)組f[i][j]表示,在只有i個(gè)物品,容量為j的情況下背包問(wèn)題的最優(yōu)解,那么當(dāng)物品種類變大為i+1時(shí),最優(yōu)解是什么?第i+1個(gè)物品可以選擇放進(jìn)背包或者不放進(jìn)背包(這也就是0和1),假設(shè)放進(jìn)背包(前提是放得下),那么f[i+1][j]=f[i][j-weight[i+1]+value[i+1];如果不放進(jìn)背包,那么f[i+1][j]=f[i][j]。

由此得出狀態(tài)轉(zhuǎn)移方程:

f[i+1][j]=max(f[i][j],f[i][j-weight[i+1]+value[i+1])

給出一段代碼:  

int f[10][2000];//全局變量,自動(dòng)初始化為0  int weight[10];  int value[10];  #define  max(x,y)   (x)>(y)?(x):(y)  int main()  {            int N,M;      cin>>N;//物品個(gè)數(shù)      cin>>M;//背包容量      for (int i=1;i<=N; i++)      {          cin>>weight[i]>>value[i];      }      for (int i=1; i<=N; i++)          for (int j=1; j<=M; j++)          {              if (weight[i]<=j)              {                  f[i][j]=max(f[i-1][j],f[i-1][j-weight[i]]+value[i]);//狀態(tài)轉(zhuǎn)移方程            }              else                  f[i][j]=f[i-1][j];          }            cout<<f[N][M]<<endl;    }  上面的代碼用了一個(gè)二維數(shù)組存儲(chǔ),下面試著用一維數(shù)組存儲(chǔ)  

int f[2000];//全局變量,自動(dòng)初始化為0  

int weight[10];  

int value[10];  

#define  max(x,y)   (x)>(y)?(x):(y)  

int main()  

{  

    int N,M;  

    cin>>N;//物品個(gè)數(shù) 

    cin>>M;//背包容量 

    for (int i=1;i<=N; i++)  

    {  

        cin>>weight[i]>>value[i];  

    }  

    for (int i=1; i<=N; i++)  

        for (int j=M; j>=1; j--)  

        {  

            if (weight[i]<=j)  

            {  

               f[j]=max(f[j],f[j-weight[i]]+value[i]);  

            }             

        }  

     cout<<f[M]<<endl;//輸出最優(yōu)解   

}  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 祥云县| 堆龙德庆县| 巴林右旗| 巩义市| 青州市| 五华县| 彰化市| 通山县| 田东县| 获嘉县| 瓮安县| 进贤县| 墨竹工卡县| 黄浦区| 会理县| 鄢陵县| 克东县| 苏尼特右旗| 静海县| 祁东县| 涞水县| 安宁市| 茌平县| 万宁市| 广元市| 桐乡市| 台中县| 斗六市| 申扎县| 广平县| 民丰县| 视频| 莎车县| 柞水县| 灵山县| 黑河市| 清水县| 乐清市| 都江堰市| 新竹县| 三河市|