爱吃橘子的猴 2022-11-25 17:35 采纳率: 100%
浏览 4
已结题

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

img

-


#include<stdio.h>
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;m<n;m++){
        if(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

  • 写回答

3条回答 默认 最新

  • CSDN专家-link 2022-11-25 17:49
    关注
    
     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行代码不完整啊

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 12月3日
  • 已采纳回答 11月25日
  • 创建了问题 11月25日

悬赏问题

  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体