#决策单调性dp,分治#LOJ 6039「雅礼集训 2017 Day5」珠宝
分析
观察到这个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」珠宝的更多相关文章
- loj #6039 「雅礼集训 2017 Day5」珠宝 分组背包 决策单调性优化
LINK:珠宝 去年在某个oj上写过这道题 当时懵懂无知wa的不省人事 终于发现这个东西原来是有决策单调性的. 可以发现是一个01背包 但是过不了 冷静分析 01背包的复杂度有下界 如果过不了说明必然 ...
- @loj - 6039@ 「雅礼集训 2017 Day5」珠宝
目录 @description@ @solution@ @accpeted code@ @details@ @description@ Miranda 准备去市里最有名的珠宝展览会,展览会有可以购买珠 ...
- [LOJ#6039].「雅礼集训 2017 Day5」珠宝[决策单调性]
题意 题目链接 分析 注意到本题的 \(C\) 很小,考虑定义一个和 \(C\) 有关的状态. 记 \(f(x,j)\) 表示考虑到了价格为 \(x\) 的物品,一共花费了 \(j\) 元的最大收益. ...
- [loj6039]「雅礼集训 2017 Day5」珠宝 dp+决策单调性+分治
https://loj.ac/problem/6039 我们设dp[i][j]表示考虑所有价值小于等于i的物品,带了j块钱的最大吸引力. 对于ci相同的物品,我们一定是从大到小选k个物品,又发现最大的 ...
- LOJ6039. 「雅礼集训 2017 Day5」珠宝【决策单调性优化DP】【分治】【思维好题】
LINK 懒得搬题面 简要题意:n个物品,每个物品有一个价格和一个吸引力,问你对于\(i \in [1,k]\),花费i的价格能得到的最大吸引力 其中价格的范围很小,在\([1,300]\)范围内 思 ...
- LOJ#6038. 「雅礼集训 2017 Day5」远行(LCT)
题面 传送门 题解 要不是因为数组版的\(LCT\)跑得实在太慢我至于去学指针版的么--而且指针版的完全看不懂啊-- 首先有两个结论 1.与一个点距离最大的点为任意一条直径的两个端点之一 2.两棵树之 ...
- 【刷题】LOJ 6038 「雅礼集训 2017 Day5」远行
题目描述 Miranda 生活的城市有 \(N\) 个小镇,一开始小镇间没有任何道路连接.随着经济发现,小镇之间陆续建起了一些双向的道路但是由于经济不太发达,在建设过程中,会保证对于任意两个小镇,最多 ...
- loj#6040. 「雅礼集训 2017 Day5」矩阵(线性代数+递推)
题面 传送门 题解 我的线代学得跟屎一样看题解跟看天书一样所以不要指望这题我会写题解 这里 //minamoto #include<bits/stdc++.h> #define R reg ...
- loj#6038 「雅礼集训 2017 Day5」远行
分析 代码 #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define ...
- LOJ#6038. 「雅礼集训 2017 Day5」远行 [LCT维护子树的直径]
树的直径一定是原联通块4个里的组合 1.LCT,维护树的直径,这题就做完了 2.直接倍增,lca啥的求求距离,也可以吧- // powered by c++11 // by Isaunoya #inc ...
随机推荐
- win32- 函数运行速度测试
LARGE_INTEGER nFreq, t1, t2; int loop_count = 0; double dt; double time_sum = 0; QueryPerformanceFre ...
- 分发函数singledispatch
import functools @functools.singledispatch() def myfunc(arg): print("default myfunc({!r})" ...
- docker部署fastdfs并在Django中集成
拉取Fastdfs镜像 docker pull delron/fastdfs 构建Tracker容器 是在Linux环境下,使用docker镜像构建tracker容器,用于启动跟踪服务器,起到调度的作 ...
- 在本地运行 LLMs 的 6 种方法
商业人工智能和大型语言模型 (LLM) 有一个很大的缺点:隐私.在处理敏感数据或专有数据时,我们无法从这些工具中获益.因此,我们需要了解如何在本地运行私人 LLM.开源模型提供了一种解决方案,但它们也 ...
- 使用二进制重排 & Clang插桩技术点来进行iOS冷启动进行优化
1.冷启动 1.1 什么是冷启动? 冷启动是指内存中不包含该应用程序相关的数据,必须要从磁盘载入到内存中的启动过程. 注意:重新打开 APP, 不一定就是冷启动. 当内存不足,APP被系统自动杀死后, ...
- Android内存优化—内存优化总结
内存优化总结 内存问题 内存抖动:导致GC导致卡顿 内存泄漏:导致频繁GC,可用内存减少 内存溢出:导致OOM 工具排查 AS中的Profiler查看内存情况,是否锯齿状,是否持续上升 MAT排查 L ...
- mac环境下安装python3的requests包
大家知道,mac环境默认安装的都是python2,自己装好python3之后,怎么使用pip来安装到python3下的包呢? 解决方法:pip3 install requests
- 【Azure 微服务】Service Fabric 部署时遇见了VMExtensionProvisioningError错误: Multiple VM extensions failed to be provisioned on the VM
问题描述 Deployment Azure Service Fabric 时,遇见了VMExtensionProvisioningError, 全文如下: Deployment Name: 385A ...
- 简单配置Sql专家云
一.实例配置 1.添加实例 点击全面诊断实例配置,右上角点击添加. 2.填写实例信息 根据下图填写对应的信息,连接测试成功后点击保存. 3.添加完成 4.修改实例 找到对应的实例,点击下图蓝色框修改即 ...
- ReentrantLock原理CAS+AQS队列
ReentrantLock主要利用CAS+AQS队列来实现.它支持公平锁和非公平锁,两者的实现类似. CAS:Compare and Swap,比较并交换.CAS有3个操作数:内存值V.预期值A.要修 ...