题目描述

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

题解

菜死了菜死了。。

因为普通的01背包问题是NP的,所以我们要观察题目中的一些特殊性质。

注意到C非常小,可以把C拿出来做文章。

对于每一个物品体积,我们可以有方程:dp[i]+sum[j-i]->dp[j]

对于C一样的物品,我们要选肯定是要先选价值大的,所以sum数组是一个上凸的。

我们可以对于每个C,再去枚举余数,在相同余数下进行dp。

因为有了上面的结论,那么我们的dp就有了单调性,若i转移到了x,那么(l-x)只会被(L-i)转移,(x-r)只会被(i-R)转移。

可以用分治dp做。

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#define M 302
#define K 50002
#define N 1000002
using namespace std;
typedef long long ll;
ll dp[][K],g[][K];
int pre,now,pos,n,k,mx;
vector<ll>vec[M];
inline int rd(){
int x=;char c=getchar();bool f=;
while(!isdigit(c)){if(c=='-')f=;c=getchar();}
while(isdigit(c)){x=(x<<)+(x<<)+(c^);c=getchar();}
return f?-x:x;
}
inline ll cmp(ll x,ll y){return x>y;}
void solve(int l,int r,int L,int R,int sum){
if(L>R||l>r)return;
int mid=(L+R)>>;ll num=,point=-;
for(int i=max(mid-sum,l);i<=r&&i<mid;++i){
if(g[pre][i]+vec[pos][mid-i-]>num){
num=g[pre][i]+vec[pos][mid-i-];point=i;
}
}
if(point<)point=l;
g[now][mid]=num;
solve(l,point,L,mid-,sum);solve(point,r,mid+,R,sum);
}
int main(){
n=rd();k=rd();int x,y;
for(int i=;i<=n;++i){
x=rd();y=rd();
vec[x].push_back(y);mx=max(mx,x);
}
now=;pre=;
for(int i=;i<=mx;++i)if(vec[i].size()){
pos=i;swap(now,pre);
sort(vec[i].begin(),vec[i].end(),cmp);int x=vec[i].size();
for(int j=;j<x;++j)vec[i][j]+=vec[i][j-];
for(int j=;j<i;++j){
int p=;
for(int l=j;l<=k;l+=i,p++)g[pre][p]=dp[pre][l],g[now][p]=;p--;
solve(,p,,p,vec[i].size());
for(int l=j,p=;l<=k;l+=i,p++)dp[now][l]=max(dp[now^][l],g[now][p]);
}
}
for(int i=;i<=k;++i)printf("%lld ",dp[now][i]);
return ;
}

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

  1. @loj - 6039@ 「雅礼集训 2017 Day5」珠宝

    目录 @description@ @solution@ @accpeted code@ @details@ @description@ Miranda 准备去市里最有名的珠宝展览会,展览会有可以购买珠 ...

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

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

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

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

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

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

  5. LOJ6039. 「雅礼集训 2017 Day5」珠宝【决策单调性优化DP】【分治】【思维好题】

    LINK 懒得搬题面 简要题意:n个物品,每个物品有一个价格和一个吸引力,问你对于\(i \in [1,k]\),花费i的价格能得到的最大吸引力 其中价格的范围很小,在\([1,300]\)范围内 思 ...

  6. 「雅礼集训 2017 Day5」矩阵

    填坑填坑.. 感谢wwt耐心讲解啊.. 如果要看这篇题解建议从上往下读不要跳哦.. 30pts 把$A$和$C$看成$n$个$n$维向量,那$A_i$是否加入到$C_j$中就可以用$B_{i,j}$表 ...

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

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

  8. 【loj6038】「雅礼集训 2017 Day5」远行 树的直径+并查集+LCT

    题目描述 给你 $n$ 个点,支持 $m$ 次操作,每次为以下两种:连一条边,保证连完后是一棵树/森林:询问一个点能到达的最远的点与该点的距离.强制在线. $n\le 3\times 10^5$ ,$ ...

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

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

随机推荐

  1. 纯手写springIOC

    大家好啊- 那么今天来带大家写一下spring的ioc. 其实也很简单,首先我们明白两点,java解析xml和java的反射机制,因为ioc就是主要是基于这两个来实现,今天只是简单的来大家实现下. 废 ...

  2. Flask实战第5天:页面跳转和重定向

    GET和POST请求 在网络请求中有许多请求方式,比如GET, POST, DELETE, PUT等,最常用的就是GET和POST GET 只会在服务器上获取资源,不会更改服务器的状态,这种请求方式推 ...

  3. css选择器概述

    css选择器种类 id选择器 类选择器.属性选择器.伪类选择器 元素选择器.伪元素选择器 通配符选择器.子类选择器.后代选择器.相邻兄弟选择器.选择器分组 一.id选择器 <p id=" ...

  4. iOS----------Xcode 无线调试

    环境要求: 至少Mac OSX 10.12.6 iOS 11 Xcode 9 1. ”自己的工程“ -> windows -> Device and Simulators ,打开设备和模拟 ...

  5. Android Studio教程06-布局,监听器以及基本控件

    目录 2. 监听器 3. 布局 3.1. 布局分类 (1). Linear Layout (2). Relative Layout (3). ListView (4). Grid View 4. 其他 ...

  6. MongoDB 集合间关联查询后通过$filter进行筛选

    在前面的分享中,有讲解 “详解MongoDB中的多表关联查询($lookup)” 一节,其内容涵盖了常见的集合管理的需求.我们知道文档的选择都是通过$match进行匹配刷选.但这是文档间的匹配筛选,并 ...

  7. Aspnet mvc移除WebFormViewEngine

    为了提高mvc的速度,在Global.asax中移除WebFormViewEngine protected void Application_Start() { RemoveWebFormEngine ...

  8. OSXFUSE file system is not available 解决方法

    操作系统版本:10.14 macos mojeva 今天用truecrypt加载加密盘时候提示次错误:用window加载也有错误,不过用windows自带的工具检查修复了错误. 解决办法: 1.访问h ...

  9. Jalor 5学习心得

    jalor5是一套功能强大的框架,该框架集成了spring.mybatis.cxf.日志.异常等组件,和其它未提及的部分组件,如消息组件. 它还自带了权限管理,内容管理,国际化等功能,该框架在项目开发 ...

  10. .net prams关键字

    先举个例子: 代码如下: class Program { static void Main(string[] args) { Console.WriteLine(Sum(1)); Console.Wr ...