爱吃橘子的猴 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日

悬赏问题

  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题
  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改