UVA 1149 bin packing (贪心)
2016-07-17 16:20
344 查看
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 .
The first line of the input contains the number of items n (1<=n<=105) . 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.
Your program has to write the minimal number of bins required to pack all items.
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<=105) . The second line contains one integerthat 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
一.分析
二.代码
// // main.cpp // Uva1149 // // Created by 张嘉韬 on 16/7/17. // Copyright © 2016年 张嘉韬. All rights reserved. // #include <iostream> #include <cstring> #include <algorithm> using namespace std; void print (int *l,int n) { for(int i=0;i<n;i++) { cout<<l[i]<<" "; } } int main(int argc, const char * argv[]) { //freopen("/Users/zhangjiatao/Documents/暑期训练/input.txt","r",stdin); int n,L,l[100010],counter; counter=0; cin>>n>>L; for(int i=0;i<n;i++) cin>>l[i]; sort(l+0,l+n); //print(l,n); int left,right; left=0,right=n-1; while(left<=right) { if(l[left]+l[right]<=L) { left++; right--; } else right--; counter++; } cout<<counter<<endl; return 0; }
相关文章推荐
- POJ2337 Catenyms
- 你所得到的,必是你已经选择和付出的
- Java学习--JavaWeb简介
- BOM浏览器对象
- LeetCode - 79. Word Search
- Integer to Roman
- [2016JZSC]【NOIP2016提高A组模拟7.17】总结
- longest-valid-parentheses
- hdu-1081 To The Max (最大子矩阵和)
- Android 9Patch图片
- javascript基础DOM操作
- 设计文件系统时应尽量减少访问磁盘的次数,以提高文件系统的性能.下列各种措施中,哪些可以减少磁盘服务时间?
- CodeForces #1 C. Ancient Berland Circus(两种解法...
- ActionBar扩展
- java基础
- c:import 标签详解
- 跳台阶问题(变态跳台阶)
- 355-Design Twitter
- 二叉树的深度 java
- 内部类