题意:

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

给出盒子的数量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模型

    我们讲过Magento有两种模型,简单模型和EAV(Entity Attribute Value)模型.上一章我们讲过所有的Magento模型都是继承自Mage_Core_Model_Abstract ...

  2. LUOGU P5061 秘密任务(背包+二分图染色)

    传送门 解题思路 \(orz\)出题人的神仙做法.本蒟蒻看不懂,就水个求补图再二分图染色的方法来\(%1%\)出题人. 首先我们对图中\(m\)个关系连边,发现这样是没法做的,因为我们最后要关注的是谁 ...

  3. eclipse git项目的冲突文件处理

    https://jingyan.baidu.com/article/3c48dd34895a07e10ae35871.html

  4. 正则表达式替换字符串中的html标签

    正则表达式替换字符串中的html标签 ··· var newStr = str.replace(/<[^>]+>/g, ''); ···

  5. Linux上VNC 启动和关闭

    查询vnc的线程: [admin@cn2-uat-esb-01-0001 ~]$ ps -ef|grep vncadmin 19080 21305 0 10:04 pts/2 00:00:00 gre ...

  6. 数据可视化(Echart) :柱状图、折线图、饼图等六种基本图表的特点及适用场合

    数据可视化(Echart) 柱状图.折线图.饼图等六种基本图表的特点及适用场合 参考网址 效果图 源码 <!DOCTYPE html> <html> <head> ...

  7. 3. 初识jmeter及JDK安装

    jmeter 介绍 Apache JMeter™应用程序是开源软件,100%纯Java应用程序,旨在加载测试功能行为和测量性能.它最初是为测试Web应用程序而设计的,但后来扩展到其他测试功能. Jme ...

  8. 作用域 {}代码块 const修饰符 引用

    简单分为:全局作用域.局部作用域.语句作用域 如果希望在局部变量的作用域内使用同名的全局变量,可以在该变量前加上“::” ::aver=20 #include<iostream> usin ...

  9. PAT_A1012#The Best Rank

    Source: PAT A1012 The Best Rank (25 分) Description: To evaluate the performance of our first year CS ...

  10. Java反射机制调用私有方法

    1.获取目标类: 每个类都有一个class属性,通过实体类的class属性获取: Class clazz = Person.class 通过对象获取.  Person p1 = new Person( ...