微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

所以我正在解决一个小背包,但是有错误排序操作

如何解决所以我正在解决一个小背包,但是有错误排序操作

#include<iostream>
#include <bits/stdc++.h>
using namespace std;
class knapsack
{
public:
    int profit[4]={280,100,120,120};
    int weight[4]={40,10,20,24};
    int total=60;
    float fraction[];
    int fractotal=0;
    int profittotal=0;
    int getprofit=0;
    float temp[4]={0,0};
    float temp1=0;
    float temp2=0;
    float temp3=0;
    float temp4=0;
void displayvalues()
{
    int i;
    cout<<"The profit and weight of the item"<<"\n";
    cout<<"The Profit"<<"  ";
    for(i=0;i<4;i++)
    {
        cout<<profit[i]<<" ";
    }
    cout<<"\n"<<"The weights"<<"  ";
    for(i=0;i<4;i++)
    {
        cout<<weight[i]<<" ";
    }
}
float fractionalknapsack()
{
    int i,j;
    for(i=0;i<4;i++)
    {
        fraction[i]=profit[i]/weight[i];
    }
    cout<<"\n"<<"The values are"<<"\n";
    for(i=0;i<4;i++)
    {
        profittotal=profittotal+profit[i];
    }
    for(i=0;i<4;i++)
    {
        cout<<fraction[i]<<"\n";
        fractotal= fractotal+fraction[i];
    }
    if(fractotal<=total)
    {
        cout<<"The maximum possible value is"<<profittotal;
    }
    else if(fractotal>=total)
    {
        for(i=0;i<4;i++)
        {
            for(j=i+1;j<4;j++)
            {
                if(fraction[i]<fraction[j])
                {
                    temp2=fraction[i];
                    fraction[i]=fraction[j];
                    fraction[j]=temp2;
                    temp3=profit[i];
                    profit[i]=profit[j];
                    profit[j]=temp2;
                    temp4=weight[i];
                    weight[i]=weight[j];
                    weight[j]=temp4;
                }
            }
        }
        for(i=0;i<4;i++)
        {

    while(getprofit<total)
    {
        if(getprofit+weight[i]<=total)
        {
            temp[i]=1;
            getprofit+=weight[i];
        }
        else
        {
            temp[i]=(total-getprofit)/weight[i];
            getprofit=total;
            i+=1;
        }
    }
    cout<<temp;

        }
    }
    for(i=0;i<4;i++)
    {
        temp1+=profit[i]*temp[i];
    }
    cout<<temp1;
}
};
int main()
{
    knapsack k;
    k.displayvalues();
    k.fractionalknapsack();
}

所以在这里,如果您看到我正在用我的方法解决小背包问题,但是排序操作中有错误,那么有人可以给我解决方案。这真的很有帮助。因此,在小数背包功能中,如果下一个值比上一个值大,则我必须进行排序,否则我将使用别的方法,但是我使用了排序操作,但无法正常工作。所以有人可以帮助我。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。