记录编号 98680 评测结果 AAAEEETEEE
题目名称 电子书狂热者 最终得分 30
用户昵称 Gravatar隨風巽 是否通过 未通过
代码语言 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;
}