贪心算法专题

一、背包相关问题
1.最优装载问题:

给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不超过c。

分析:
由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大排序,依次选择每个物体,直到装不下为止。这是一种典型的贪心算法,它只顾眼前,但却能得到最优解。

样例输入:
5 20

5 2 6 8 9 
样例输出:

扫描二维码关注公众号,回复: 2761699 查看本文章
3
题解:
#include <stdio.h>
int main(){
    int c,n,i,sum = 0,index = 0;
    int a[100];
    while(scanf("%d %d",&n,&c),n,c){
        for(i = 0; i < n; i++){
            scanf("%d",&a[i]);
        }
        //冒泡排序,从小到大
        for(i = 0;i < n - 1 ;i++){
            for(int j = 0;j < n - i - 1;j++){
                if(a[j] > a[j+1]){
                    int temp;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        //最小的先装上
        for(i = 0; i < n; i++){
            if(a[i] < c - sum){
                sum += a[i];
                index++;
            }
        }
        printf("%d\n",index);
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/liangllhahaha/article/details/80413437