题目传送门


分析

观察到这个0/1背包中单个物品的体积不超过300,考虑分体积考虑。

设 \(dp[i]\) 表示容量大小为 \(i\) 的背包能获得的最大价值,

\(dp[i]=\max\{dp[i-j]+s[j]\}\) 是满足四边形不等式的,好像和凸性有关。

所以直接用决策单调性实现,枚举余数,就可以做到 \(O(m \max\{a_i\}\log m)\)


代码

#include <cstdio>
#include <cctype>
#include <functional>
#include <algorithm>
using namespace std;
const int N=50011;
struct node{int y,next;}e[N*20];
typedef long long lll;
int T,tot,n,m,mx,as[N];
lll dp[N],f[N],s[N*20],g[N];
int iut(){
int ans=0; char c=getchar();
while (!isdigit(c)) c=getchar();
while (isdigit(c)) ans=ans*10+c-48,c=getchar();
return ans;
}
void print(lll ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
void Max(lll &x,lll y){x=x>y?x:y;}
int max(int a,int b){return a>b?a:b;}
void dfs(int l,int r,int L,int R){
if (l>r) return;
int mid=(l+r)>>1,MID=L; lll ans=0;
for (int j=max(mid-n,L);j<=mid&&j<=R;++j)
if (g[j]+s[mid-j]>ans)
ans=g[j]+s[mid-j],MID=j;
Max(f[mid],ans);
dfs(l,mid-1,L,MID);
dfs(mid+1,r,MID,R);
}
int main(){
T=iut(),m=iut();
for (int i=1;i<=T;++i){
int x=iut(),y=iut(); mx=max(mx,x);
e[i]=(node){y,as[x]},as[x]=i;
}
for (int i=1;i<=mx;++i)
if (as[i]){
n=0;
for (int j=as[i];j;j=e[j].next) s[++n]=e[j].y;
sort(s+1,s+1+n,greater<int>());
for (int j=1;j<=n;++j) s[j]+=s[j-1];
for (int j=0;j<i;++j){
tot=0; for (int k=j;k<=m;k+=i) g[++tot]=dp[k],f[tot]=0;
dfs(1,tot,1,tot);
tot=0; for (int k=j;k<=m;k+=i) Max(dp[k],f[++tot]);
}
}
for (int i=1;i<=m;++i) print(dp[i]),putchar(32);
return 0;
}

#决策单调性dp,分治#LOJ 6039「雅礼集训 2017 Day5」珠宝的更多相关文章

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

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

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

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

  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. LOJ#6038. 「雅礼集训 2017 Day5」远行(LCT)

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

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

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

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

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

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

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

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

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

随机推荐

  1. [攻防世界][Web]ics-06

    打开靶机对应的url,展开是一个网站的样子,其实啥也么有 所有tab都点一遍,发现只有报表中心有内容,url为 http://61.147.171.105:49797/index.php?id=1 猜 ...

  2. cookie和localStorage和sessionStorage的区别

    cookie和localStorage和sessionStorage的区别 下面从几个方向区分一下 cookie,localStorage,sessionStorage 的区别 生命周期: cooki ...

  3. Celey异步发送邮件时报django.core.exceptions.ImproperlyConfigured的解决办法

    原main.py入口文件 #Celery的入口 from celery import Celery #创建Celery实例 生产者 celery_app = Celery('meiduo') #加载配 ...

  4. pyqt5学习示例

    python代码编写pyqt5 主窗口的类型:有三种窗口 # 相关函数方法 setWindowTitle() # 设置主窗口的标题 resize() # 设置窗口的大小 statusBar() # 创 ...

  5. Flask学习(三)

    数据库操作 数据库驱动(drivers)模块:pymysql.MySQLDB ORM ORM 全拼Object-Relation Mapping,中文意为 对象-关系映射.主要实现模型对象到关系数据库 ...

  6. MySQL和Redis基本安装和配置

    MySQL 下载和安装 mysql官网下载:https://dev.mysql.com/downloads/mysql/ 下载后将目录下的bin路径加入到环境变量中 在安装目录下创建 my.ini 配 ...

  7. kafka节点故障恢复原理

    Kafka的LEO和HW LEO LEO是Topic每一个副本的最后的偏移量offset+1 HW(高水位线) High WaterMark是所有副本中,最小的LEO Follower副本所在节点宕机 ...

  8. 【Azure Developer】Visual Studio 2019中如何修改.Net Core应用通过IIS Express Host的应用端口(SSL/非SSL)

    问题描述 在VS 2019调试 .Net Core Web应用的时,使用IIS Express Host,默认情况下会自动生成HTTP, HTTPS的端口,在VS 2019的项目属性->Debu ...

  9. 关闭mysql上锁的表/数据

    一.输入查询语句,查看是否有数据被上锁 select * from information_schema.innodb_trx; 取 trx_mysql_thread_id 字段值 kill < ...

  10. 分组聚合不再难:Pandas groupby使用指南

    处理大量数据时,经常需要对数据进行分组和汇总,groupby为我们提供了一种简洁.高效的方式来实现这些操作,从而简化了数据分析的流程. 1. 分组聚合是什么 分组是指根据一个或多个列的值将数据分成多个 ...