记录编号 |
43513 |
评测结果 |
AAAAAAAAAA |
题目名称 |
单词游戏 |
最终得分 |
100 |
用户昵称 |
Truth.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);
}