zoukankan      html  css  js  c++  java
  • 普通背包 贪心算法c

    #include<stdio.h>   
     
    void package_part(int *w,int *v,double *p,int n,int c,int *flag)  
    {  
        int i,j,temp;
        double tempD,totalValue = 0.0;
        
        //计算单位
        for(i=0;i<n;i++)
        {
            p[i] = (double)v[i] / (double)w[i];
            flag[i] = i;
        }
        //根据单价排序,flag数组保存物品的下标
        for(i=0;i<n;i++)
        {
            for(j=n-1;j>i;j--)
            {
                if(p[j] > p[j-1])
                {
                    temp = flag[j];
                    flag[j] = flag[j-1];
                    flag[j-1] = temp;    
                    
                    tempD = p[j];
                    p[j] = p[j-1];
                    p[j-1] = tempD;
                }
            }
        }
        //̰贪心法得出应该装入的物品    
        for(i=0;i<n;i++)
        {
            if(c >= w[flag[i]])
            {
                totalValue += v[flag[i]];
                c -= w[flag[i]];
                printf("第%d号物品整个放入
    ",flag[i]);
            }else
            {
                totalValue += p[flag[i]] * (double)c / (double) w[flag[i]];
                printf("第%d号物品放入了%f
    ",flag[i],(double)c / (double) w[flag[i]]);
                break;
            }
        }
        printf("总价值为:%f",totalValue);
    }  
     
    void main()  
    {  
        int c, n ; 
    
        printf("请输入背包的最大容量:");
        scanf("%d",&c);
    
        printf("输入物品数:");
        scanf("%d",&n);
    
     int *w=(int *)malloc(n*sizeof(int));
        int *v=(int *)malloc(n*sizeof(int)); 
        
        
        printf("请分别输入物品的重量:");
        for(int i=0;i<n;i++)
            scanf("%d",&w[i]);
     
        printf("请分别输入物品的价值ֵ:");
        for(int i=0;i<n;i++)
            scanf("%d",&v[i]);
    
        
        double p[] = {0};  //每个物品的单位价值  
        int flag[10];   //用于排序
        package_part(w,v,p,n,c,flag);  
    }  

  • 相关阅读:
    01_Struts2概述及环境搭建
    CSRF跨站请求伪造
    XSS跨站脚本攻击
    文件包含漏洞
    文件上传漏洞
    PHP常见代码执行后门函数
    SQL注入总结
    [转]Android PopupWindow的使用和分析
    [转] 基于XMPP协议的Android即时通信系
    [转]Android推送方案分析(MQTT/XMPP/GCM)
  • 原文地址:https://www.cnblogs.com/an-lang/p/13964085.html
Copyright © 2011-2022 走看看