标签:
为了帮助笨笨熊提前通知朋友。请你依据笨笨熊的办法。帮忙算出:须要纸盒的最少数目是多少?
执行时间限制: 无限制
内存限制: 无限制
输入:
整数V——纸盒的容积。
整数N——物品的总数目N;
共N个整数(相应N个物品的体积,每一个整数用空格隔开)。
输出:
整数M——须要纸盒的最少数目;
例子输入:
10
2
2 3
例子输出:
1
假设最后剩余一个则单独放置。每放一次盒子数加1。
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
bool order(int a,int b);
int main(){
int v,n,m=0,input,first,last;
vector<int> obj;
cout << "纸盒的容积V:";
cin >> v;
cout << "物品的总数目N:";
cin >> n;
cout << "这N个物品的体积各自是:";
for(int i=0;i!=n;i++)
{
cin >> input;
obj.push_back(input);
}
// cout << "输入的是:";
//
// for(i=0;i!=n;i++)
// {
//
// cout <<obj[i]<<" ";
// }
// cout <<endl;
sort(obj.begin(),obj.end(),order); //降序排列obj中的元素。
//
// cout << "排序后:" ;
// for(int so=0;so!=obj.size();so++) cout << obj[so]<<" ";
// cout <<endl;
first=0; //较大的物品
last=obj.size()-1; //较小的物品
if(obj[first]>v)
{
cout <<"ERROR:输入的数超过容器容积"<<endl;
return 1;
}
if(n==1) m=1; //仅仅有一个物品。
while(first<last)
{
if(obj[first]+obj[last]<v+1) //较大的物品与较小的物品放在一起。
{
m++;
first++;
last--;
}
else {m++;first++;} //较大的物品单独放。
if(first==last) m++; //最后剩余一个单独放
}
cout << "至少须要" << m<<"个容器" << endl;
return 0;
}
bool order(int a,int b)
{
return a>b; //降序排列
}版权声明:本文博主原创文章。博客,未经同意不得转载。
标签:
原文地址:http://www.cnblogs.com/bhlsheji/p/4802140.html