#决策单调性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 ... 
随机推荐
- 解决xshell连不上ubuntu虚拟机
			分析 原因:虚拟机未安装ssh服务(Xshell远程连接需通过ssh协议) 解决方法 ubuntu安装ssh服务器 sudo apt-get install openssh-server 后续有问题可 ... 
- 【LeetCode数组#1二分法】二分查找、搜索插入、在排序数组中查找元素的第一个和最后一个位置
			二分查找 题目 力扣704题目链接 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 ... 
- 第一百一十一篇:基本引用类型Date
			好家伙,本篇为<JS高级程序设计>第五章的学习笔记 1.基本引用类型 引用值(或者对象)是某个特定引用类型的实例,在ECMAScript中,引用类型是把数据和功能组织到一起的结构,(像 ... 
- DataGear数据可视化分析平台介绍
			DataGear 是一款开源免费的数据可视化分析平台,自由制作任何您想要的数据看板,支持接入SQL.CSV.Excel.HTTP接口.JSON等多种数据源. 系统特点: 友好的数据源接入 支持运行时接 ... 
- 【Azure Redis】Azure Redis添加了内部虚拟网络后,其他区域的主机通过虚拟网络对等互连访问失败
			问题描述 跨区域无法访问Azure Redis服务, Redis 启用了Network并设置在一个VNET中,现在客户端部署在另一个区域数据中心中,两个数据中心区域使用VNET Peer(对等互连)访 ... 
- 利用微软官方API实现Office文档的在线预览功能
			随着互联网时代的飞速发展,越来越多的工作开始依赖于云端服务,我们的办公方式也逐渐发生了翻天覆地的变化.在这种背景下,急需一种无需本地安装Office软件,就能快速查看和共享Word.PowerPoin ... 
- Java 异常处理(1) : try-catch- finally中finally的使用
			1 package com.bytezero.throwable; 2 3 import java.io.File; 4 import java.io.FileInputStream; 5 impor ... 
- Vue实现图片瀑布流
			在线演示地址:点击前往 一,创建一个Waterfall组件 代码如下: <template> <div class="waterfall"> <!-- ... 
- 闭关修炼180天----手写迷你版的tomcat-Minicat
			手写迷你版的tomcat-Minicat 小谈Tomcat Tomcat请求处理⼤致过程 Tomcat是⼀个Http服务器(能够接收并且处理http请求,所以tomcat是⼀个http服务器) 我们使 ... 
- 案例8:将"picK"的大小写互换
			最终输出结果为PICk. 需要先计算两个字母之间的间隔,比如a和A之间的间隔为多少. 然后在将大写字母转换为小写字母,加上间隔的值: 将小写字母转换为大写字母,减去间隔的值. 示例代码如下: #def ... 
