记录编号 248794 评测结果 AAAAAAAAAA
题目名称 装配线调度 最终得分 100
用户昵称 Gravatarliu_runda 是否通过 通过
代码语言 C++ 运行时间 0.043 s
提交时间 2016-04-11 14:58:42 内存使用 0.67 MiB
显示代码纯文本
#include<cstdio>
#include<cstring>
const int maxn=10010;
int t1[maxn],t2[maxn];
int c1[maxn],c2[maxn];
int p[3][maxn];
int f[3][maxn];
int min(int a,int b){
	return a<b?a:b;
}
int main(){
	freopen("als.in","r",stdin);
	freopen("als.out","w",stdout);
	int n;scanf("%d",&n);
	scanf("%d %d",t1+0,t1+n+1);
	scanf("%d %d",t2+0,t2+n+1);
	for(int i=1;i<=n;++i)scanf("%d",t1+i);
	for(int i=1;i<=n;++i)scanf("%d",t2+i);
	for(int i=1;i<n;++i)scanf("%d",c1+i);
	for(int i=1;i<n;++i)scanf("%d",c2+i);
	memset(f,127,sizeof(f));
	f[1][n]=t1[n+1]+t1[n];
	f[2][n]=t2[n+1]+t2[n];
	for(int i=n-1;i>=1;--i){
		p[1][i]= (f[1][i+1]<=f[2][i+1]+c1[i])? 1:2;
		p[2][i]= (f[1][i+1]+c2[i]<=f[2][i+1])? 1:2;
		f[1][i]=min(f[1][i+1]+t1[i],f[2][i+1]+c1[i]+t1[i]);
		f[2][i]=min(f[2][i+1]+t2[i],f[1][i+1]+c2[i]+t2[i]);
	}
	f[1][1]+=t1[0];f[2][1]+=t2[0];
	printf("%d\n",min(f[1][1],f[2][1]));
	int flag=2;
	if(f[1][1]<=f[2][1]){
		flag=1;
		printf("1");
	}else printf("2");
	for(int i=1;i<n;++i){
		printf(" %d",p[flag][i]);
		flag=p[flag][i];
	}printf("\n");
/*	for(int j=1;j<=2;++j){
		for(int i=1;i<n;++i)printf("%d ",p[j][i]);
		printf("\n");
	}*/
	fclose(stdin);fclose(stdout);
	return 0;
}