记录编号 43513 评测结果 AAAAAAAAAA
题目名称 单词游戏 最终得分 100
用户昵称 GravatarTruth.Cirno 是否通过 通过
代码语言 C++ 运行时间 0.326 s
提交时间 2012-10-10 21:38:29 内存使用 3.15 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;

int n,maxcost,waynum[10],wayto[10][20],waycost[10][20];
bool used[10][20];

void dfs(int pos,int cost)
{
	int i,it[10]={0},tocost[10]={0};
	if (cost>maxcost)
		maxcost=cost;
	for (i=1;i<=waynum[pos];i++)
		if (!used[pos][i])
			if (tocost[wayto[pos][i]]<=waycost[pos][i])
			{
				tocost[wayto[pos][i]]=waycost[pos][i];
				it[wayto[pos][i]]=i;
			}
	for (i=1;i<=5;i++)
		if (it[i])
		{
			used[pos][it[i]]=true;
			dfs(wayto[pos][it[i]],cost+tocost[i]);
			used[pos][it[i]]=false;
		}
}

int main(void)
{
	freopen("words.in","r",stdin);
	freopen("words.out","w",stdout);
	int i,j,a[2];
//	bool found;
	string ch;
	cin>>n;
	waynum[0]=5;
	for (i=1;i<=n;i++)
	{
		wayto[0][i]=i;
		waycost[0][i]=0;
	}
	for (i=1;i<=n;i++)
	{
		cin>>ch;
		a[0]=ch[0];
		a[1]=ch[ch.length()-1];
		for (j=0;j<2;j++)
			if (a[j]=='A')
				a[j]=1;
			else if (a[j]=='E')
				a[j]=2;
			else if (a[j]=='I')
				a[j]=3;
			else if (a[j]=='O')
				a[j]=4;
			else if (a[j]=='U')
				a[j]=5;
//		if (a[0]!=a[1])
//		{
			waynum[a[0]]++;
			wayto[a[0]][waynum[a[0]]]=a[1];
			waycost[a[0]][waynum[a[0]]]=ch.length();
/*		}
		else
		{
			found=false;
			for (j=1;j<=waynum[a[0]];j++)
			{
				if (wayto[a[0]][j]==a[1])
				{
					found=true;
					waycost[a[0]][j]+=ch.length();
					break;
				}
			}
			if (!found)
			{
				waynum[a[0]]++;
				wayto[a[0]][waynum[a[0]]]=a[1];
				waycost[a[0]][waynum[a[0]]]=ch.length();
			}
		}*///my special assignment
	}
	dfs(0,0);
	cout<<maxcost<<endl;
	return(0);
}