BZOJ 3163 Eden的新背包问题
分治背包+单调队列优化。
但是为什么maxn要1w多?。。。不怎么懂。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cstdlib>
#define maxn 10050
#define maxs 1050
#define maxm 300500
using namespace std;
int n,x,y,z,m,ans[maxm],up[maxn],q[maxn],vals[maxn],l,r;
struct point
{
int l,r,v,w,c;
point (int l,int r,int v,int w,int c):l(l),r(r),v(v),w(w),c(c){}
};
vector <point> v;
vector <int> dp,linker[maxn],val[maxn];
int read()
{
int data=;char ch;
while (ch<'' || ch>'') ch=getchar();
while (ch>='' && ch<='')
{
data=data*+ch-'';
ch=getchar();
}
return data;
}
void insert(int x,int y,int v,int w,vector <int> & dp)
{
while ((l<=r) && (vals[r]<=dp[x]-y*w)) r--;
q[++r]=x;vals[r]=dp[x]-y*w;
}
void DC(int left,int right,vector <point> v,vector <int> dp)
{
int mid=left+right>>;
vector <point> x,y;
for (int i=;i<v.size();i++)
{
point now=v[i];
if ((now.l==left) && (now.r==right))
{
for (int j=;j<=maxs%now.v;j++) up[j]=maxs/now.v*now.v+j;
for (int j=maxs%now.v+;j<now.v;j++) up[j]=(maxs/now.v-)*now.v+j;
for (int j=;j<now.v;j++)
{
l=;r=;int ret=up[j],lim=up[j],ret1=up[j]/now.v,ret2=up[j]/now.v;
while (ret>=)
{
while ((l<=r) && (q[l]>ret)) l++;
while ((lim>=ret-now.c*now.v) && (lim>=))
{
insert(lim,ret2,now.v,now.w,dp);
lim-=now.v;ret2--;
}
dp[ret]=vals[l]+ret1*now.w;
ret1--;ret-=now.v;
}
}
}
else if (now.r<=mid) x.push_back(now);
else if (now.l>=mid+) y.push_back(now);
else
{
x.push_back(point(now.l,mid,now.v,now.w,now.c));
y.push_back(point(mid+,now.r,now.v,now.w,now.c));
}
}
if (left==right)
{
for (int i=;i<linker[left].size();i++)
ans[linker[left][i]]=dp[val[left][i]];
return;
}
DC(left,mid,x,dp);
DC(mid+,right,y,dp);
}
int main()
{
n=read();
for (int i=;i<=n;i++)
{
x=read();y=read();z=read();
if (i!=) v.push_back(point(,i-,x,y,z));
if (i!=n) v.push_back(point(i+,n,x,y,z));
}
for (int i=;i<=maxn;i++) dp.push_back();
m=read();
for (int i=;i<=m;i++)
{
x=read();y=read();x++;
linker[x].push_back(i);val[x].push_back(y);
}
DC(,n,v,dp);
for (int i=;i<=m;i++) printf("%d\n",ans[i]);
return ;
}
BZOJ 3163 Eden的新背包问题的更多相关文章
- 【BZOJ】【3163】【HEOI2013】Eden的新背包问题
多重背包/思路题 多次询问,每次从所有物品中忽略一件,问最大收益…… 这题我用的zyf的一个“暴力”做法,就是先预处理出来g1[i][j]表示1~i号物品花了j块钱的最大价值,g2[i][j]表示i~ ...
- BZOJ 3163: [Heoi2013]Eden的新背包问题( 背包dp )
从左到右, 从右到左分别dp一次, 然后就可以回答询问了. ---------------------------------------------------------- #include< ...
- BZOJ3163&Codevs1886: [Heoi2013]Eden的新背包问题[分治优化dp]
3163: [Heoi2013]Eden的新背包问题 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 428 Solved: 277[Submit][ ...
- P4095 [HEOI2013]Eden 的新背包问题
P4095 [HEOI2013]Eden 的新背包问题 题解 既然假定第 i 个物品不可以选,那么我们就设置两个数组 dpl[][] 正序选前i个物品,dpr[][] 倒序选前i个物品 ,价格不超过 ...
- luogu P4095 [HEOI2013]Eden 的新背包问题 多重背包 背包的合并
LINK:Eden 的新背包问题 就是一个多重背包 每次去掉一个物品 询问钱数为w所能买到的最大值. 可以对于每次Q暴力dp 利用单调队列优化多重背包 这样复杂度是Qnm的. 发现过不了n==10的点 ...
- bzoj 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
- 3163: [Heoi2013]Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
- DSY3163*Eden的新背包问题
Description "寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听."失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的 ...
- bzoj3163: [Heoi2013]Eden的新背包问题
Description “寄没有地址的信,这样的情绪有种距离,你放着谁的歌曲,是怎样的心心静,能不能说给我听.”失忆的Eden总想努力地回忆起过去,然而总是只能清晰地记得那种思念的感觉,却不能回忆起她 ...
随机推荐
- (17)odoo方法和修饰器
---------------------更新时间:11:06 2016-09-27 星期二18:06 2016-09-18 星期日10:31 2016-03-01 星期二-------------- ...
- MyBatis核心配置文件模版
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLI ...
- hdu-----(4857)逃生(拓扑排序)
逃生 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submissi ...
- hdu---1024Max Sum Plus Plus(动态规划)
Max Sum Plus Plus Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- JDE处理选项
处理选项为JDE的一种数据结构,命名方式如下: The name of a data structure can be a maximum of characters-only if you begi ...
- 在现有 SharePoint 服务器上安装 PowerPivot for SharePoint
步骤1: 检查 SQL Server 2008 R2 Analysis Services 实例的“程序”文件夹.如果您找到了现有安装或之前安装的证据,则执行剩余步骤.否则,直接执行步骤 2:安装 Po ...
- Android为ViewPager增加切换动画——使用属性动画.
ViewPager作为Android最常用的的组件之一,相信大家在项目中会频繁的使用到的,例如利用ViewPager制作引导页.轮播图,甚至做整个app的表现层的框架等等. Android3.0以下不 ...
- jsp作用域
1.page: JSP页面内所有实例的默认作用域都是page,仅限于本页面使用 2.request: 同一次请求所涉及的服务器资源(可能是页面.Servlet等),例如,程序使用<jsp:for ...
- RM报表的打印偏移
自己摸索一下 RMReport1.SaveReportOptions.AutoLoadSaveSetting := True; RMReport1.SaveReportOptions.UseRegis ...
- java.lang.ExceptionInInitializerError
java.lang.ExceptionInInitializerError at com.csdhsm.compiler.test.DevTest.testReadInput(DevTest.java ...