• 普通背包 贪心算法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);  
    }  

  • 相关阅读:
    有效获取状态栏(StatusBar)高度
    各种数据库连接
    Spring AOP 原理
    Spring ioc 原理
    转载的别人的ajax跨域解决方法
    如何监听input的脚本赋值
    JAVA之Socket编程
    JAVA中的多线程
    JAVA文件操作
    实验三 kali下metasploit的漏洞攻击实践
  • 原文地址:https://www.cnblogs.com/an-lang/p/13964085.html
Copyright © 2020-2023  润新知