Description

印度洋暖流温润着纽约,四季丰沛的雨水造就了一望无际的大草原。蒙古包是纽约最独特的一道风景线,每至二月中旬,纽约的土著傣族人民又开始半年一度的转场了。
由于牲畜和行李过多,牧民 Azone 不得不多次往返于两个草场之间运输家当。为了顺利转场,Azone 决定花费 w 元津巴布韦币,购买一辆载重为 w 的汽车。共有 n 件家具需要搬运,每件家具的重量为 wi 。Azone 每次出发前,会搬若干件总重不超过 w 的物品上车:出发前,车是空载的,Azone 会选择能搬上车的家具中最重的一件放上车(即该家具之前还未运走且放置该家具后汽车不会超载),然后在剩下的家具中继续选择一件能被搬走的最重的上车,持续装车,直至剩下的家具都塞不上车。装载完毕后,Azone 会开车运走这些家具,卸在目的地,再驾空车返回继续运送,直至转场完毕。
Azone 希望在运送次数不超过 R 的情况下完成转场,求 Azone 最少需要购置价值多少的车。

Input

第一行,两个整数 n 和 R,分别表示家具件数及最多运送次数。
第二行,若干个整数 wi ,表示家具重量。

Output

一行,表示答案。

Sample Input

6 2
26 7 10 30 5 4

Sample Output

42

Data Constraint

subtask 1 60pts,R,n,w i ≤ 20。
subtask 2 40pts,没有额外限制。
对于100% 的数据,1 ≤ R,n,wi ≤ 2000。

Solution

  • 考场上看到这题,哇,二分答案啊,拍都没拍就交了。

  • 结果——WA 60分!

  • 不能直接二分啊!

  • 对于本题,我们并不能证明对于一个合法容量 WW ,W+1W+1 也合法(刚好卡住的情况)。

  • 我们设最优答案为 CC ,再令 mx=Max{wi}mx=Max\{w_i\} 。

  • 于是我们可以证明所有 W≥C+wiW\ge C+w_i 一定合法(因为每次都一定可以多装点)。

  • 那么我们随便二分一个答案 TT (注意不一定 TT 就是最优的)。

  • 此时所有 W<T−mxW 一定不合法。

  • 那么我们暴力检验 mxmx 个,在区间 [T−mx,T][T-mx,T] 中选一个最优的即可。

  • 在判断一个容量 WW 是否合法时,

  • 可以用一个 multisetmultiset 每次 O(logN)O(logN) 的查找出能装的最大的那个。

  • 即可以 O(N log N)O(N\ log\ N) 判断。

  • 时间复杂度 O(N2 log N)O(N^2\ log\ N) 。

Code

#include<cstdio>
#include<cctype>
#include<set>
using namespace std;
const int N=2005;
int n,R,mx,ans;
int w[N];
multiset<int>s;
multiset<int>::iterator it;
inline int read()
{int X=0,w=0; char ch=0;while(!isdigit(ch)) w|=ch=='-',ch=getchar();while(isdigit(ch)) X=(X<<1)+(X<<3)+(ch^48),ch=getchar();return w?-X:X;
}
inline int max(int x,int y)
{return x>y?x:y;
}
inline bool check(int x)
{s.clear();for(int i=1;i<=n;i++) s.insert(w[i]);int cnt=0;while(!s.empty()){int sum=x;while(!s.empty() && sum>=*s.begin()){it=s.upper_bound(sum);it--;sum-=*it;s.erase(it);}if(++cnt>R) break;}return cnt<=R;
}
int main()
{freopen("newyork.in","r",stdin);freopen("newyork.out","w",stdout);n=read(),R=read();int l=0,r=0;for(int i=1;i<=n;i++){r+=w[i]=read();mx=max(mx,w[i]);}while(l<=r){int mid=l+r>>1;if(check(mid)){r=mid-1;ans=mid;}else l=mid+1;}for(int i=ans-mx;i<ans;i++)if(check(i)) return 0&printf("%d\n",i);printf("%d\n",ans);return 0;
}

JZOJ 5677. 【GDOI2018Day2模拟4.21】纽约相关推荐

  1. JZOJ 5678. 【GDOI2018Day2模拟4.21】果树

    Description NiroBC 姐姐是个活泼的少女,她十分喜欢爬树,而她家门口正好有一棵果树,正好满足了她爬树的需求. 这颗果树有N个节点,节点标号 1-N.每个节点长着一个果子,第i个节点上的 ...

  2. JZOJ5677. 【GDOI2018Day2模拟4.21】纽约

    Description 印度洋暖流温润着纽约,四季丰沛的雨水造就了一望无际的大草原.蒙古包是纽约最独特的一道风景线,每至二月中旬,纽约的土著傣族人民又开始半年一度的转场了. 由于牲畜和行李过多,牧民 ...

  3. jzoj5920. 【NOIP2018模拟10.21】风筝(dp,最长上升子序列)

    5920. [NOIP2018模拟10.21]风筝 Description 当一阵风吹来,风筝飞上天空,为了你,而祈祷,而祝福,而感动-- Description oyiya 在 AK 了 IOI 之 ...

  4. JZOJ 5689. 【GDOI2018Day2模拟4.25】二进制

    Description Pupil 发现对于一个十进制数,无论怎么将其的数字重新排列,均不影响其是不是3 的倍数.他想研究对于二进制,是否也有类似的性质.于是他生成了一个长为n的二进制串,希望你对于这 ...

  5. [JZOJ NOIP2018模拟10.21]

    考试之前我刚刚领略到了特判的重要性,没想到T2的两个子任务还是写挂了,丢了20分 考试的感觉不行,一路打的都是暴力,正解的思路想到一半就断了推不下去 T1:逛公园 题目链接: https://jzoj ...

  6. JZOJ 5691. 【GDOI2018Day2模拟4.25】求和

    Description master对树上的求和非常感兴趣.他生成了一棵有根树,并且希望多次询问这棵树上一段路径上所有节点深度的k次方和,而且每次的k可能是不同的.此处节点深度的定义是这个节点到根的路 ...

  7. JZOJ 5379. 【NOIP2017提高A组模拟9.21】Victor爱数字

    Description Victor 是一名热爱数字的同学.他最近在思考这样一个问题: 一个字符串是回文的当且仅当它倒过来还和原来相同.那么如果一个数的数串没有一个长度超过1 的子串是回文串的话,它就 ...

  8. JZOJ 4676. 【NOIP2016提高A组模拟7.21】模板串

    Description 科学家温斯顿从数据库中找到了一串相当长的字符串. 他正试图用一个模板串来重构这个字符串. 他可以将模板串复制多份,通过合适的方式拼接起来,使得最终的串与原串一致. 如果两个模板 ...

  9. JZOJ 4675. 【NOIP2016提高A组模拟7.21】Double-row

    Description 科学家温斯顿在一张超长的白纸上写下了两行数,每一行数有N个. 但他写完后觉得看起来有点不和谐.他希望重新编排,使得每一行数中没有相同的数. 他每次可以调换同一列的两个数. 请帮 ...

最新文章

  1. Ubuntu下如何解压缩zip,tar,tar.gz,tar.bz2文件
  2. ad用户和计算机的使用方法,AD技巧之指定用户登录和指定计算机登陆
  3. 苹果cms的php.ini,苹果cms安装及配置详细教程
  4. ab753变频器参数怎么拷贝到面板_技术贴:100吨连铸安川变频器的更换
  5. Spring Cloud(6.1):搭建OAuth2 Authorization Server
  6. IntelliJ IDEA——数据库集成工具(Database)的使用
  7. 技术人员如何"正确"的浪费时间?
  8. 怎么输出一个二维数组_LeetCode54与59,一个口诀教会你旋转二维数组
  9. angularjs directive2
  10. android 开启子线程执行for循环_C++11之多线程 - Part2 Joining和Detaching的使用
  11. World Wind Java开发之四——搭建本地WMS服务器(转)
  12. VC 运行时库 /MD、/MDd 和 /MT、/MTd
  13. ft2232驱动安装方法_win7系统无法安装打印机驱动程序的解决方法
  14. step1: python scrapy安装
  15. 服务器系统小米随身wifi,win8.1系统安装小米随身wifi驱动详细操作步骤【图文教程】...
  16. 深度时空网络、记忆网络与特征表达学习在 CTR 预估中的应用
  17. 计算机单位厘米 像素,300dpi的dpi是多少?是像素/英寸吗?还是像素/厘米?
  18. php登陆网页版微信代码,几行php代码实现微信自动注册登陆 (微信PC扫码受权登陆注册)...
  19. Bluetooth Profile Specification之(HFP篇)4.2 呼叫传输、设置、保持状态
  20. 关于翻译的两篇好文章

热门文章

  1. 人生苦短,Let's Go!
  2. Python学习笔记:Day 12 编写日志列表页
  3. 时频分析:短时傅立叶变换实现(5)
  4. 苹果x防水测试软件,iPhone终极防水测试 iPhone XR阵亡
  5. SEO全套精品教程价值300元[159课]
  6. 云炬创业政策学习笔记20210104
  7. SVM熟练到精通5:MATLAB实例
  8. SVM熟练到精通3:核函数与非线性分类
  9. 美研申请,你应该知道的那些事?
  10. 用C++ Builder3 制作NotePad(记事本)