用贪心算法解决01背包问题输出结果错误

img

-


#include
struct good
{
    int No;
    ///物品编号
    float weight;
    //物品重量
    float value;
    //物品价值
    float pw;
    //物品单位重量的价值; pw=value/weight;
}
;
int main(){
    int n;
    int c;
    float we=0;
    float va=0;
    scanf("%d%d",&n,&c);
    struct good a[n];
    for(int i = 0;i < n;i++) {
        scanf("%f %f",&a[i].weight,&a[i].value);
        a[i].pw=a[i].value/a[i].weight;
        a[i].No=i;
    } 
    //排序
    for(int i = 0;i < n;i++) {
        for(int m = 0;m < n-i-1;m++) {
            if(a[m].pw>a[m+1].pw)
            {
                int t=a[m].No;
                a[m].No=a[m+1].No;
                a[m+1].No=t;
            }
        }
    }
    //加起来
    for(int i = 0;i < n;i++) {
    for(int m=0;mif(a[m].No==n-1-i){
        we+=a[m].weight;
        va+=a[m].value;
        }
        if(we>c)
        {
            we-=a[m].weight;
            va-=a[m].value;
            goto out;//脱离循环
        }
    }
    }
    out:;
    printf("%f %f",we,va);
    return 0;
}

img


 if(a[m].pw>a[m+1].pw)
            {
                int t=a[m].No;
                a[m].No=a[m+1].No;
                a[m+1].No=t;
            }

只交换No不对吧, 应该整个结构交换
第40行代码不完整啊

您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632