您的位置:首页 > 其它

未完成 BZOJ 1531

2016-12-11 21:48 351 查看
#include <bits/stdc++.h>

#define N 50000

int read()
{
int k=1,x=0;
char ch;
ch=getchar();
while(ch<'0' || ch>'9')
{
if(ch=='-')
k=-1;
ch=getchar();
}
while(ch>='0' && ch<='9')
{
x=x*10+ch-'0';
ch=getchar();
}
return x*k;
}

struct NOTE
{
int w,n;
}p
;

int f
,Q
,w
;
int n,m;

int main()
{
n=read();
for(int i=1;i<=n;i++)
p[i].w=read();
for(int i=1;i<=n;i++)
p[i].n=read();
m=read();

memset(f,127,sizeof(f));
f[0]=0;
for(int i=1;i<=n;i++)
{
for(int j=0;j<p[i].w;j++)
{
int head=0,tail=0;
for(int k=j;k<=m;k+=p[i].w)
{
while(head<=tail && w[head]<k-p[i].w*p[i].n)
head++;
while(head<=tail && f[k]-(k-w[head])/p[i].w<=Q[tail])
tail--;
Q[++tail]=f[k];
w[tail]=k;
f[k]=std::min(f[k],Q[head]+(k-w[head])/p[i].w);
}
}
}

printf("%d\n",f[m]);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: