做法显然:贪心,但是怎么贪?

  1. 首先从大到小或从小到大排序,窝这次是从大到小排,这样更容易理解(从小到大更方变)

  2. 然后设置两个变量 frontafter 作为前指针和后指针。

  3. 循环判断:

    • 当前后两个数能放入背包时,则 ans++ 并把两指针:

      front++;
      after--;
    • 当不能同时放入时,放进大的那个,也就是前面的那个,并且 ans++, front++;

最后看一下code:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int NR = 1e5 + 5;
int t, n, m, v[NR], front, after, ans;
bool cmp(int x, int y)
{
return x > y;
}
void Initialization()//每组数据前后初始化
{
memset(v, 0, sizeof(v));//清零
n = 0;
m = 0;
front = 1;
after = 0;
ans = 0;
}
void Cin()//每组数据的输入
{
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> v[i];
after = n;
}
int main()
{
cin >> t;
Initialization();//初始化
for (int T = 1; T <= t; T++)
{
Cin();//输入
sort(v + 1, v + n + 1, cmp);//排序
for (int i = 1; i <= n; i++)//循环n次,因为最多分配n次,不会超过n次
if (front >= after)//如果前指针已经超过或等于后指针时说明已经结束,所以结束循环
{
ans++;
cout << ans << endl;//输出答案
Initialization();//初始化
break;
}
else if (v[front] + v[after] <= m)
{//如果前后两个物品能放下
ans++;
front++;//前指针向后移
after--;//后指针向前移
}
else
{//否则的话
ans++;
front++;//只有前指针向后移
}
}
return 0;
}

求赞ฅʕ•̫͡•ʔฅ

最新文章

  1. $.getJSON在IE8下失效
  2. python对象的生命周期
  3. 64 位 Ubuntu 下 android adb 不可用解决方法
  4. Unity3D研究之Prefab里面的Prefab关联问题
  5. poj 2082 单调栈 ***
  6. java基础语法笔记
  7. web前端url传递值 js加密解密
  8. c# 自定义位数生成激活码
  9. JSTL(JSP Standard Tag Library ,JSP标准标签库)
  10. Mac终端命令收集
  11. Pair Project
  12. BSGS与exBSGS学习笔记
  13. List does not exist. The page you selected contains a list that does not exist. It may have been deleted by another user
  14. 【九天教您南方cass 9.1】 12 道路断面土方计算
  15. sql语句查询排序
  16. 菜鸟学Java(十六)——Jboss简介
  17. 从源码看 Promise 概念与实现
  18. Windows 搭建ASP.NET Boilerplate项目开发环境
  19. xftp的简单使用
  20. framework7 v2.x轮播图写法:

热门文章

  1. 【webSokect】基于django Channels的简单实现
  2. MySQL时间类型datetime、bigint及timestamp的查询效率
  3. js常用函数和事件
  4. Java中常量池详解
  5. mysql官网下载yum
  6. vue中父子间传值和非父子间传值
  7. FL Slayer合成器功能之顶部组件介绍
  8. appium快速入门
  9. CentOS 7搭建本地yum源
  10. 三万字无坑搭建基于Docker+K8S+GitLab/SVN+Jenkins+Harbor持续集成交付环境