一、背包相关问题
1.最优装载问题:
给出n个物体,第i个物体重量为wi。选择尽量多的物体,使得总重量不超过c。
分析:
由于只关心物体的数量,所以装重的没有装轻的划算。只需把所有物体按重量从小到大排序,依次选择每个物体,直到装不下为止。这是一种典型的贪心算法,它只顾眼前,但却能得到最优解。
样例输入:
5 20
5 2 6 8 9
样例输出:
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;
}