zoukankan      html  css  js  c++  java
  • 轻院2270: 跳跳的书包

    2270: 跳跳的书包

    点击打开链接

    时间限制: 1 Sec  内存限制: 128 MB
    提交: 268  解决: 96
    [提交][状态][讨论版][命题人:admin]

    题目描述

    n个物品,已知每个物品的重量,书包的承重固定,每个书包最多放两个物品,可以放一个物品或者两个物品。显然总重量要求总不超过书包承重,假设每个物品的重量也不超过书包承重,问最少需要几个书包?

    输入

    第一行包含两个正整数n (0<n<=10000)和m (0<m<=2000000000),表示物品个数和书包的承重。

    接下来n行,每行一个正整数,表示每个物品的重量。重量不超过1000000000,并且每个物品的重量不超过m。

    输出

    输出一行,一个整数表示最少需要的书包个数。

    样例输入

    3 6
    1
    2
    3
    

    样例输出

    2
    

    来源

    先排下序,两头进行,遇到装不下的情况就把重量大的单独装入一个背包,因为当前的另一个物品已经是重量最小的,所以不能把两个物品装入一个背包,还有就是要考虑最后还剩下一个物品的情况,这时肯定还要用一个背包。

    #include<stdio.h>
    #include<algorithm>
    using namespace std;
    int a[10020];
    int main()
    {
    	int n,m,i,sum,ans,j;
    	while(scanf("%d%d", &n, &m)!=EOF)
    	{
    		sum=0;ans=0;
    		for(i=0;i<n;i++)
    			scanf("%d",&a[i]);
    		sort(a,a+n);
    		i=0;j=n-1;
    		while(i<=j)
    		{
    			if(a[i]+a[j]<=m)
    			{
    				ans++;
    				i++;
    				j--;
    			}
    			else if(i==j)
    			{
    				sum++;
    				break;
    			}
    			else 
    			{
    				j--;
    				sum++;
    			}	 
    		}
    		printf("%d
    ",ans+sum);
    	}
    	return 0;
    } 



  • 相关阅读:
    数组常用操作实现
    链表简单实现栈与队列
    亿万级别的表数据处理方式
    ubuntu安装与卸载.dep软件
    pg数据库表接口和数据导出
    深入分析理解Tomcat体系结构
    Servlet源码级别进行详解
    Maven命令行创建java或javaWeb项目
    解释语言与编译语言
    C++中Reference与Pointer的不同
  • 原文地址:https://www.cnblogs.com/zyq1758043090/p/10003044.html
Copyright © 2011-2022 走看看