@description@

Miranda 准备去市里最有名的珠宝展览会,展览会有可以购买珠宝,但可惜的是只能现金支付,Miranda 十分纠结究竟要带多少的现金,假如现金带多了,就会比较危险,假如带少了,看到想买的右买不到。展览中总共有 N 种珠宝,每种珠宝都只有一个,对于第 i 种珠宝,它的售价为 Ci 万元,对 Miranda 的吸引力为 Vi。Miranda 总共可以从银行中取出 K 万元,现在她想知道,假如她最终带了 i 万元去展览会,她能买到的珠宝对她的吸引力最大可以是多少?

原题传送门。

@solution@

就是个数据范围长得比较奇怪的背包。注意到就 Ci 比较小,所以考虑 Ci 相同的珠宝放在一起转移。

对于某些 Ci = p 的物品,类比多重背包的单调队列做法,我们每次一次性处理模 p 余数相同的 dp 状态。

如果 Vi 相同就是个多重背包,直接用单调队列。

如果 Vi 不相同,肯定先选择 Vi 比较大的。因为它的子问题是使用的单调队列,我们不妨猜想推广的问题有决策单调性。手动验证一下发现的确如此。

所以直接写个决策单调性即可。时间复杂度貌似是 O(K*C*log K),不过能跑过。

@accpeted code@

#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std; typedef long long ll; const int MAXC = 300;
const int MAXK = 50000;
const int MAXN = 1000000; vector<int>v[MAXC + 5]; ll s[MAXN + 5], f[2][MAXK + 5];
int N, K, p, q, cnt;
void solve(int l, int r, int opl, int opr) {
if( l > r ) return ;
int m = (l + r) >> 1;
int le = max(opl, m - cnt), ri = min(opr, m);
int opm = le; ll mx = -1;
for(int i=le;i<=ri;i++)
if( mx < f[1][p*i + q] + s[m - i] )
mx = f[1][p*i + q] + s[m - i], opm = i;
f[0][p*m + q] = mx; solve(l, m - 1, opl, opm);
solve(m + 1, r, opm, opr);
} bool cmp(int x, int y) {return x > y;}
int main() {
scanf("%d%d", &N, &K);
for(int i=1;i<=N;i++) {
int C, V; scanf("%d%d", &C, &V);
v[C].push_back(V);
}
for(p=1;p<=MAXC;p++) {
if( !v[p].size() ) continue;
for(int i=0;i<=K;i++)
f[1][i] = f[0][i], f[0][i] = 0;
cnt = 0, sort(v[p].begin(), v[p].end(), cmp);
for(int i=0;i<v[p].size();i++)
cnt++, s[cnt] = s[cnt - 1] + v[p][i];
for(q=0;q<p;q++) {
int l = 0, r = (K - q) / p;
if( l <= r ) solve(l, r, l, r);
}
}
for(int i=1;i<=K;i++)
printf("%lld%c", f[0][i], i == K ? '\n' : ' ');
}

@details@

没开 long long,率先就白给了一发。

@loj - 6039@ 「雅礼集训 2017 Day5」珠宝的更多相关文章

  1. [LOJ#6039].「雅礼集训 2017 Day5」珠宝[决策单调性]

    题意 题目链接 分析 注意到本题的 \(C\) 很小,考虑定义一个和 \(C\) 有关的状态. 记 \(f(x,j)\) 表示考虑到了价格为 \(x\) 的物品,一共花费了 \(j\) 元的最大收益. ...

  2. loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化

    LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...

  3. LOJ#6038. 「雅礼集训 2017 Day5」远行(LCT)

    题面 传送门 题解 要不是因为数组版的\(LCT\)跑得实在太慢我至于去学指针版的么--而且指针版的完全看不懂啊-- 首先有两个结论 1.与一个点距离最大的点为任意一条直径的两个端点之一 2.两棵树之 ...

  4. 【刷题】LOJ 6038 「雅礼集训 2017 Day5」远行

    题目描述 Miranda 生活的城市有 \(N\) 个小镇,一开始小镇间没有任何道路连接.随着经济发现,小镇之间陆续建起了一些双向的道路但是由于经济不太发达,在建设过程中,会保证对于任意两个小镇,最多 ...

  5. loj#6040. 「雅礼集训 2017 Day5」矩阵(线性代数+递推)

    题面 传送门 题解 我的线代学得跟屎一样看题解跟看天书一样所以不要指望这题我会写题解 这里 //minamoto #include<bits/stdc++.h> #define R reg ...

  6. loj#6038 「雅礼集训 2017 Day5」远行

    分析 代码 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define ...

  7. LOJ#6038. 「雅礼集训 2017 Day5」远行 [LCT维护子树的直径]

    树的直径一定是原联通块4个里的组合 1.LCT,维护树的直径,这题就做完了 2.直接倍增,lca啥的求求距离,也可以吧- // powered by c++11 // by Isaunoya #inc ...

  8. [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治

    https://loj.ac/problem/6039 我们设dp[i][j]表示考虑所有价值小于等于i的物品,带了j块钱的最大吸引力. 对于ci相同的物品,我们一定是从大到小选k个物品,又发现最大的 ...

  9. 「雅礼集训 2017 Day5」珠宝

    题目描述 Miranda 准备去市里最有名的珠宝展览会,展览会有可以购买珠宝,但可惜的是只能现金支付,Miranda 十分纠结究竟要带多少的现金,假如现金带多了,就会比较危险,假如带少了,看到想买的右 ...

随机推荐

  1. vue修改对象的属性值后页面不重新渲染

    原文地址:vue修改对象的属性值后页面不重新渲染 最近项目在使用vue,遇到几次修改了对象的属性后,页面并不重新渲染,场景如下: HTML页面如下: [html] view plain copy &l ...

  2. 201771010128王玉兰《面向对象与程序设计(Java)》第十七周学习总结

    第一部分:理论基础 线程的同步 多线程并发运行不确定性问题解决方案:引入线 程同步机制,使得另一线程要使用该方法,就只 能等待. 在Java中解决多线程同步问题的方法有两种: - Java SE 5. ...

  3. 【JVM】堆区域的一个详细了解并附带调优案例

    话不多说,直接撸图: 1>Eden中通过可达性分析,存活下来的对象直接通过复制算法移动到From区域中,此时该对象的分代年龄加1: 2>当下一次虚拟机进行[Minor GC]时,会同时对[ ...

  4. Java的每个Thread都希望拥有自己的名称

    一. 介绍 平时工作中可能会碰到排查多线程的bug,而在排查的时候,如果线程(单个线程或者是线程池的线程)没有一个比较明确的名称,那么在排查的时候就比较头疼,因为排查问题首先需要找出“问题线程”,如果 ...

  5. pyqt5_实例:修改xml文件中节点值

    需求: 将类似如下xml文件的externalid节点值修改成不重复的值 实现该功能的代码Func.py: #coding=utf-8 ''' Created on 2019年10月15日 @auth ...

  6. 【Oracle】CentOS7/CentOS8命令行安装Oracle 11G R2

    写在前面 很长一段时间内,国内互联网公司都在提倡"去IOE",但是很多企业还是愿意为昂贵的Oracle数据库买单,不少读者所在的公司也在用Oracle,很多读者自行安装Oracle ...

  7. SPL基础接口

    Iterator 迭代器接口 SPL规定,所有实现了Iterator接口的class,都可以用在foreach Loop中.Iterator接口中包含5个必须实现的方法: interface Iter ...

  8. WordPress美化百度分享默认图标

    因代码中使用了Font Awesome字体图标,如果你的主题没有加载字体图标,可以到WP后台--插件--安装插件页面搜索:Font Awesome 4 Menus 安装并启用,才能显示替换后的图标. ...

  9. [软件版本贴]SD.TEAM软件集

    手机轰炸机-版本:v1.0.下载地址:http://pan.baidu.com/1.zip! 营销软件盒-版本:v1.0.下载地址:http://pan.baidu.com/2.zip! 不加群提取群 ...

  10. Black Hat Python之#1:制作简单的nc工具

    nc即netcat,是网络界的瑞士军刀.当入侵了一个服务器之后,发现nc工具已经被系统管理员移除之后,可以自己制作一个简单的客户端和服务器端来实现①上传文件②执行命令③开启一个新的命令行shell等几 ...