记录编号 44434 评测结果 AAAAAAAAAA
题目名称 [顾研NOIP] 项链 最终得分 100
用户昵称 Gravatar临轩听雨ゐ 是否通过 通过
代码语言 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;
}