题意:

有个家伙装东西,他的策略是贪心,每次装进去这个盒子能装下的最大的东西,直到把这个盒子装满,再去装下一个盒子。

给出盒子的数量k和一些东西的重量,问你最小需要多大的盒子才能以这种贪心策略装下。

题解:

如果某个解可行,比它大的值未必可行,比如有15个物品,5个39,5个60,5个100,5个盒子,那么盒子大小199可以,200不行,201也不行。所以不能二分。

首先,显然答案下界为ceil(sum/k)。

设最大的物品重量为maxv,假如某个ans装不下,那么在此ans下,装下除maxv外所有物品后,所有箱子的剩余空间都小于maxv

因此,ans*k<sum-maxv+k*maxv

只需在[ceil(sum/k),ceil(sum/k+(k-1)*maxv)]区间内枚举即可。

判断一个ans的可行性复杂度是nlogn

#include<bits/stdc++.h>
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
using namespace std;
#define MAXN 1005
#define mem(a,b) memset(a,b,sizeof a)
#define rep(i,n,m) for(int i=n;i<=m;++i)
const int MOD = ;
inline int read()
{
int x = , f = ;
char c = getchar();
while (c<'' || c>'')
{
if (c == '-') f = -;
c = getchar();
}
while (c >= '' && c <= '')
{
x = x * + c - '';
c = getchar();
}
return x * f;
}
int v[MAXN], n, k, num[MAXN], vis[MAXN],num1[MAXN];
bool check(int vlo)
{
int nu = k;
mem(vis, );
//是否可以装完所有物品,贪心的装,尽量装大的,然后再补漏
int left = n;
//rep(i, 1, 1000) num1[i] = num[i];
int maxx = n,no=;
while (nu)
{
int sp = vlo;
for (int i = maxx; i > ; --i)
{
if (sp < v[no]) break;
if (sp >= v[i] && !vis[i])
{
sp -= v[i]; vis[i] = ; left--;
if (!sp) break;
}
}
while (vis[maxx]) maxx--;
while (vis[no]) no++;
nu--;
}
if (!left) return ;
return ;
}
int main()
{
int T = read();
for(int tt=;tt<=T;++tt)
{
int sum = ;
n = read(), k = read();
mem(num, );
mem(num1, );
rep(i, , n) v[i] = read(), sum += v[i];
sort(v + , v + + n);
int bi = sum / k;
if (sum % k) bi++;
int beg = max(v[n], bi);
int ans=beg;
for (int i = beg; i <= ; ++i)
{
if (check(i)) {
ans = i; break;
}
}
printf("Case #%d: %d\n", tt,ans);
}
}

牛客多校第六场 D move 枚举/机智题的更多相关文章

  1. 2019牛客多校第六场J-Upgrading Technology(枚举+单调队列)

    Upgrading Technology 题目传送门 解题思路 对于这题,我们可以枚举一个k从0~m,表示当前我们把所有技能最少升到了k级,且至少有一个为k级. 此时我们刚好获得了前k个d[]的收益, ...

  2. 2019 牛客多校第六场 D Move

    题目链接:https://ac.nowcoder.com/acm/contest/886/D 题解摘自官方题解 题目大意 有 K 个体积相同的箱子,有 N 个体积相同或相异的物品,现要按照如下策略装箱 ...

  3. 牛客多校第六场 C Generation I 组合数学 阶乘逆元模板

    链接:https://www.nowcoder.com/acm/contest/144/C来源:牛客网 Oak is given N empty and non-repeatable sets whi ...

  4. 牛客多校第六场 J Heritage of skywalkert 随即互质概率 nth_element(求最大多少项模板)

    链接:https://www.nowcoder.com/acm/contest/144/J来源:牛客网 skywalkert, the new legend of Beihang University ...

  5. 牛客多校第六场-H-Pair

    链接:https://ac.nowcoder.com/acm/contest/887/H来源:牛客网 题目描述 Given three integers A, B, C. Count the numb ...

  6. 同构图+思维构造——牛客多校第六场E

    考的其实是同构图的性质: 1.同构图的顶点数,边数相等 2.同构图通过点的映射后邻接矩阵相同 这篇博客讲的很好https://www.jianshu.com/p/c33b5d1b4cd9 本题还需要一 ...

  7. 2018牛客多校第六场 G.Pikachu

    题意: 给出一棵n个点的树,每条边有边权.对这个树加边变成一个完全图.新加的边的权值为边上两点在树上的距离.求完全图上任意两点的最大流之和. 题解: 一共有C(n,2)个点对.假设当前求s到t之间的最 ...

  8. 2018牛客多校第六场 I.Team Rocket

    题意: 给出n个区间和m个点(点按顺序给出且强制在线).每个区间只会被第一个他包含的点摧毁.问每个点能摧毁多少个区间以及每个区间是被哪个点摧毁的. 题解: 将n个区间按照左端点排序,然后用vector ...

  9. 牛客多校第六场C

    一个数很大,并不能预处理,所以要进行公式变换,存前一个的值就好 #include <bits/stdc++.h> using namespace std; typedef long lon ...

随机推荐

  1. magento结构解析

    Magento 模块 模块( module )是 Magento 的核心.站点上的任何一个动作( action ),无论是在前台和还是在后台的每一个操作都是通过模块来实现的.模块是可以视为一个容器,它 ...

  2. spring事件监听(eventListener)

    原理:观察者模式 spring的事件监听有三个部分组成,事件(ApplicationEvent).监听器(ApplicationListener)和事件发布操作. 事件 事件类需要继承Applicat ...

  3. MySQL常规操作以及问题

    背景 作为一个前端,偶尔搞下后端 要熟悉 SQL 操作,但是一段时间不用 会大部分忘记,之后又要重新查资料 所以自己整理一遍经常用到的 SQL 操作 和使用过程遇到的问题,方便自己快速查阅 一.安装 ...

  4. 暴力枚举+扫描线+线段树——cf1194E

    /*思路就是枚举矩形下面那条先,把所有和其交叉的竖线更新进线段树,然后扫描先向上更新,遇到竖线上端点就在线段树里删掉,遇到横线就更新答案*/#include<bits/stdc++.h> ...

  5. 数学二分——cf700A

    二分答案 #include<bits/stdc++.h> using namespace std; #define ll long long int n,l,v1,v2,k; double ...

  6. NX二次开发-Block UI C++界面Object Color Picker(对象颜色拾取器)控件的获取(持续补充)

    Object Color Picker(对象颜色拾取器)控件的获取 NX9+VS2012 #include <uf.h> #include <uf_obj.h> UF_init ...

  7. LInux文件基础知识和文件目录操作(二)文件I/O操作

    1.文件I/O操作分为两部分来讲解: 第一部分是非缓冲文件操作,这种操作适合于比较小规模文件的读写和对实时性要求很高的设备的数据通信,这类操作是系统调用提供的: 第二部分是缓冲文件操作,所面向的则是大 ...

  8. 软件测试工程师如何提高提BUG逼格

    某个周四早上,沏好一杯茶,刚要坐到座位上,就听开发说,你们测试怎么提的Bug,给个截图能说明啥?截图上面显示的奔溃,如果是必现还好,如果不是必现,那么我们怎么去定位?至少给个日志吧?当时我的内心活动是 ...

  9. SPOJ VFMUL - Very Fast Multiplication (FFT)

    题目链接:VFMUL - Very Fast Multiplication Description Multiply the given numbers. Input n [the number of ...

  10. vue-lic工具搭建vue-webpack项目

    1.安装node环境(安装node时候会自动安装npm) 参考官网:https://nodejs.org/en/download/ 2.安装vue的脚手架工具vue-cli // 全局安装 npm i ...