记录编号 |
44434 |
评测结果 |
AAAAAAAAAA |
题目名称 |
[顾研NOIP] 项链 |
最终得分 |
100 |
用户昵称 |
临轩听雨ゐ |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.680 s |
提交时间 |
2012-10-18 18:59:05 |
内存使用 |
3.43 MiB |
显示代码纯文本
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
using namespace std;
ifstream in("necklaced.in");
ofstream out("necklaced.out");
struct
{
int pos;
int num;
}cc[200];
int n;
int a[200][200]={0};
bool b[200]={0};
int sum[200]={0};
int tmp=0,ans=0;
bool p()
{
for(int i=1;i<=26;i++)
if(sum[i]%2!=0)
return false;
return true;
}
int dfs(int x)
{
if(tmp>ans)
if(p()==true)
ans=tmp;
if(x>=n)
return 0;
if(!b[x+1])
{
tmp++;
for(int i=1;i<=a[x+1][0];i++)
sum[a[x+1][i]]++;
dfs(x+1);
tmp--;
for(int i=1;i<=a[x+1][0];i++)
sum[a[x+1][i]]--;
}
dfs(x+1);
}
int main()
{
in>>n;
char s[27];
for(int i=1;i<=n;i++)
{
in>>s;
int j;
for(j=0;j<strlen(s);j++)
{
a[i][j+1]=s[j]-'A'+1;
cc[a[i][j+1]].num++;
cc[a[i][j+1]].pos=i;
}
a[i][0]=j+1;
}
for(int i=1;i<=26;i++)
if(cc[i].num==1)
b[cc[i].pos]=true;
dfs(0);
out<<ans<<endl;
return 0;
}