在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/人工智能/ 求最優(yōu)購(gòu)買算法

求最優(yōu)購(gòu)買算法

購(gòu)物車的一個(gè)算法,大致流程是:

已知每種商品的價(jià)格、重要級(jí)(1到5,5是最重要)。在有限金額的情況下,可以買一種或者多種商品,每種商品數(shù)量1個(gè),實(shí)現(xiàn)購(gòu)買的積分(價(jià)格x重要級(jí))最高。

舉栗子:
A商品:價(jià)格 100元,重要級(jí) 3
B商品:價(jià)格 350,重要級(jí) 2
C商品:價(jià)格 800,重要級(jí) 5
D商品:價(jià)格 550,重要級(jí) 1

賬戶總金額:3000元

傳入ABCD四種商品,算出買哪一種或者幾種商品的積分最高。大家誰(shuí)有算法的思路?謝謝!

回答
編輯回答
情已空

這就是個(gè)背包問(wèn)題,用動(dòng)態(tài)規(guī)劃來(lái)解決,嵌套兩個(gè)循環(huán),一個(gè)狀態(tài)轉(zhuǎn)移方程就能出結(jié)果,具體你可以看看這篇文章01背包問(wèn)題,貼一下他的代碼:

#include<iostream>
#include<algorithm>
using namespace std;

int main()
{
    const int N = 6;                     //物品個(gè)數(shù)
    const int V = 10;                    //背包體積
    int C[N + 1] = { -1,5,6,5,1,19,7 };  //第i個(gè)物品的體積(下標(biāo)從1開(kāi)始)
    int W[N + 1] = { -1,2,3,1,4,6,5 };   //第i個(gè)物品的價(jià)值
    int F[N + 1][V + 1] = { 0 };         //狀態(tài)

    for (int i = 1; i <= N; i++)  //對(duì)于第i個(gè)物品
        for (int v = 0; v <= V; v++)
        {
            F[i][v] = F[i - 1][v];  //第i個(gè)不放
            if (v - C[i] >= 0 && F[i][v] < F[i - 1][v - C[i]] + W[i])  //如果比它大,再放第i個(gè)
                F[i][v] = F[i - 1][v - C[i]] + W[i];
        }

    cout << "最大價(jià)值是:" << F[N][V] << endl;  //9

    return 0;
}

希望能幫助到你。

2017年11月5日 19:11