记录编号 |
98680 |
评测结果 |
AAAEEETEEE |
题目名称 |
电子书狂热者 |
最终得分 |
30 |
用户昵称 |
隨風巽 |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
1.830 s |
提交时间 |
2014-04-24 14:06:59 |
内存使用 |
0.45 MiB |
显示代码纯文本
#include<iostream>
#include<cstdio>
using namespace std;
typedef long long LL;
const int MAXN=1000+10;
LL T,N,N1,N2,N3,num[MAXN],a[MAXN],r[MAXN],b[MAXN],s[MAXN],price[MAXN];
LL f[MAXN],data[10000+10],firstbook[MAXN];
LL min(LL a,LL b){return a<b?a:b;}
int main()
{
freopen("zealot.in","r",stdin);
freopen("zealot.out","w",stdout);
while(scanf("%d",&N)==1)
{
if(N==0)continue;
LL i,j,k,c,total=0;
for(i=1;i<=N;i++)
{
scanf("%d",&num[i]);
total+=num[i];
}
scanf("%d",&N1);
for(i=1;i<=N1;i++)
{
scanf("%d",&c);
scanf("%d",&price[c]);
}
scanf("%d",&N2);
for(i=1;i<=N2;i++)
scanf("%d%d",&a[i],&r[i]);
scanf("%d",&N3);
for(i=1;i<=N3;i++)
scanf("%d%d",&b[i],&s[i]);
for(i=1;i<=N;i++)
if(price[i]==0)
price[i]=price[i-1];
for(i=1,k=1;i<=N;i++)
{
firstbook[i]=k;
for(j=1;j<=num[i];j++)
data[k++]=i;
}
f[0]=0;
for(i=1;i<=total;i++)
{
f[i]=f[i-1]+price[data[i]];
for(k=1;k<=N2;k++)
for(j=1;j<=a[k]&&i-j>=0;j++)
f[i]=min(f[i],f[i-j]+r[k]);
for(k=1;k<=N3;k++)
for(j=1;j<=b[k]&&data[i]-j+1>=1;j++)
f[i]=min(f[i],f[firstbook[data[i]-j+1]-1]+s[k]);
}
cout<<f[total]<<endl;
}
return 0;
}