(简单贪心)Bin Packing
2017-04-23 15:24
239 查看
A set of n 1-dimensional items have to be packed in identical bins. All bins have exactly the same length l and each item i has length li<=l . We look for a minimal number of bins q such that
each bin contains at most 2 items,
each item is packed in one of the q bins,
the sum of the lengths of the items packed in a bin does not exceed l .
You are requested, given the integer values n , l , l1 , ..., ln , to compute the optimal number of bins q .
Input
The first line of the input contains the number of items n (1<=n<=10
5) . The second line contains one integer that corresponds to the bin length l<=10000 . We then have n lines containing one integer value that represents the length of the items.
Output
Your program has to write the minimal number of bins required to pack all items.
Sample Input
Sample Output
Hint
The sample instance and an optimal solution is shown in the figure below. Items are numbered from 1 to 10 according to the input order.
思路:贪心
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#include<iostream>
int n,l;
int a[100010];
int main()
{
cin>>n>>l;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
int sum=0;
int len=0;
int temp=n-1;
for(int i=0;i<n;i++)
if(a[i]>0)
{
if(a[i]<l)
{
for(int j=temp;j>i;--j)
{
if(a[j]>0&&a[j]+a[i]<=l)
{
a[j]=-1;
temp--;
break;
}
}
}
a[i]=-1;
sum++;
}
printf("%d\n",sum);
}
each bin contains at most 2 items,
each item is packed in one of the q bins,
the sum of the lengths of the items packed in a bin does not exceed l .
You are requested, given the integer values n , l , l1 , ..., ln , to compute the optimal number of bins q .
Input
The first line of the input contains the number of items n (1<=n<=10
5) . The second line contains one integer that corresponds to the bin length l<=10000 . We then have n lines containing one integer value that represents the length of the items.
Output
Your program has to write the minimal number of bins required to pack all items.
Sample Input
10 80 70 15 30 35 10 80 20 35 10 30
Sample Output
6
Hint
The sample instance and an optimal solution is shown in the figure below. Items are numbered from 1 to 10 according to the input order.
思路:贪心
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
#include<iostream>
int n,l;
int a[100010];
int main()
{
cin>>n>>l;
for(int i=0;i<n;++i)
cin>>a[i];
sort(a,a+n);
int sum=0;
int len=0;
int temp=n-1;
for(int i=0;i<n;i++)
if(a[i]>0)
{
if(a[i]<l)
{
for(int j=temp;j>i;--j)
{
if(a[j]>0&&a[j]+a[i]<=l)
{
a[j]=-1;
temp--;
break;
}
}
}
a[i]=-1;
sum++;
}
printf("%d\n",sum);
}
相关文章推荐
- UVA 1149 Bin Packing 装箱(简单贪心)
- joj 2657 简单贪心
- ZJU2109 FatMouse' Trade - 简单贪心
- Codeforces Round #111 (Div. 2) 160A Twins(简单贪心)
- HDU 1800 简单贪心 13.1.10用trie重做 ---其实是统计出现次数最多的单词
- 最简单的贪心算法--删除数字问题
- hdoj 1789 简单贪心解析
- poj 1065Wooden Sticks (简单的贪心)
- 【HDU4313】Matrix 多校 解题报告+AC代码+思路+算法正确性证明,此为Kruskal贪心恶心版本,非自虐倾向慎入!建议想找解题报告的童鞋看简单版本的,这个我写给自己【目标达成 0.2%】
- POJ 2940 Wine Trading in Gergovia(简单贪心)
- 3637 Shopaholic 简单贪心
- 任务调度 简单贪心
- HDOJ 1009 FatMouse' Trade简单的贪心
- 喷水装置 简单的贪心
- 多校第12场 FZU H Monster (简单贪心)
- ZOJ1025(简单贪心)
- 简单的排序+贪心 pku 1089_Intervals
- 乘船问题 简单贪心
- SDUT 2370 || POJ 2940 Wine Trading in Gergovia(简单贪心)
- 贪心算法简单实现