比赛 20101117 评测结果 AATTTTTTTA
题目名称 拯救 最终得分 30
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-17 11:16:09
显示代码纯文本
#include <cstdio>
const int MAXN=1005;

int sta[MAXN];
int N;
long long step,d[MAXN][5];

void set(int i,int s)
{
	if (i<1||sta[i]==s) return ;
	if (i==1)
	{
		if (sta[i]!=s)
			sta[i]=s,step++;
		return ;
	}
	set(i-1,1);
	for(int k=i-2;k>=1;k--)
		set(k,0);
	if (sta[i]!=s)
		sta[i]=s,step++;
}

int main()
{
	freopen("savey.in","r",stdin);
	freopen("savey.out","w",stdout);
	scanf("%d",&N);
	for(int i=1;i<=N;i++)
		scanf("%d",sta+i);
	for(;N>=1;N--)
	{
		if (sta[N])
		{
			set(N,0);
			break;
		}
	}
	N--;
	d[1][1]=1;d[1][2]=0;	
	d[1][3]=1;d[1][4]=1;
	for(int i=1;i<=N;i++)
	{
		d[i][1]=d[i-1][2]+d[i-1][3]+1;
		d[i][2]=d[i-1][1]+1;
		d[i][3]=d[i-1][4]+1+d[i-1][3];
		d[i][4]=d[i-1][4]+1+d[i-1][3];
	}
	printf("%lld\n",step+d[N][3]);
	return 0;
}