Description
有一批集装箱要装上一艘载重量为c的轮船。其中集装箱i的重量为Wi。最优装载问题要求确定在装载体积不受限制的情况下,将尽可能多的集装箱装上轮船。 编程任务: 对于给定的n个集装箱和轮船的载重量C,编程计算装入最多时的集装箱个数。
Input
输入由多组测试数据组成。 每组测试数据输入的第1行中有2个正整数n和C。正整数n是集装箱个数;正整数C是轮船的载重量。接下来的一行中有n个整数,分别表示n个集装箱的重量,它们之间用空格分隔。
Output
对应每组输入,输出的每行是计算出的装入最多时的集装箱个数。
Sample Input
4 5 3 5 2 1
Sample Output
2 #include<iostream>#include<stdio.h>#include<queue>using namespace std;struct Node { int weight; friend bool operator <(Node a,Node b) { return a.weight > b.weight; }};int main(){ int n,c,num,sum; Node p; while(cin>>n>>c) { priority_queue<Node>Q; while(n--) { scanf("%d",&p.weight); Q.push(p); } num = sum = 0; while(!Q.empty()) { p = Q.top(); Q.pop(); sum += p.weight; num ++; if(sum > c) { num --; break; } } cout<<num<<endl; } return 0;}
2
#include<iostream>#include<stdio.h>#include<queue>using namespace std;struct Node { int weight; friend bool operator <(Node a,Node b) { return a.weight > b.weight; }};int main(){ int n,c,num,sum; Node p; while(cin>>n>>c) { priority_queue<Node>Q; while(n--) { scanf("%d",&p.weight); Q.push(p); } num = sum = 0; while(!Q.empty()) { p = Q.top(); Q.pop(); sum += p.weight; num ++; if(sum > c) { num --; break; } } cout<<num<<endl; } return 0;}