记录编号 44434 评测结果 AAAAAAAAAA
题目名称 [顾研NOIP] 项链 最终得分 100
用户昵称 Gravatar临轩听雨ゐ 是否通过 通过
代码语言 C++ 运行时间 0.680 s
提交时间 2012-10-18 18:59:05 内存使用 3.43 MiB
显示代码纯文本
  1. #include <fstream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include <string>
  5. #include <cstdio>
  6. using namespace std;
  7. ifstream in("necklaced.in");
  8. ofstream out("necklaced.out");
  9. struct
  10. {
  11. int pos;
  12. int num;
  13. }cc[200];
  14. int n;
  15. int a[200][200]={0};
  16. bool b[200]={0};
  17. int sum[200]={0};
  18. int tmp=0,ans=0;
  19.  
  20. bool p()
  21. {
  22. for(int i=1;i<=26;i++)
  23. if(sum[i]%2!=0)
  24. return false;
  25. return true;
  26. }
  27.  
  28. int dfs(int x)
  29. {
  30. if(tmp>ans)
  31. if(p()==true)
  32. ans=tmp;
  33. if(x>=n)
  34. return 0;
  35. if(!b[x+1])
  36. {
  37. tmp++;
  38. for(int i=1;i<=a[x+1][0];i++)
  39. sum[a[x+1][i]]++;
  40. dfs(x+1);
  41. tmp--;
  42. for(int i=1;i<=a[x+1][0];i++)
  43. sum[a[x+1][i]]--;
  44. }
  45. dfs(x+1);
  46. }
  47.  
  48. int main()
  49. {
  50. in>>n;
  51. char s[27];
  52. for(int i=1;i<=n;i++)
  53. {
  54. in>>s;
  55. int j;
  56. for(j=0;j<strlen(s);j++)
  57. {
  58. a[i][j+1]=s[j]-'A'+1;
  59. cc[a[i][j+1]].num++;
  60. cc[a[i][j+1]].pos=i;
  61. }
  62. a[i][0]=j+1;
  63. }
  64. for(int i=1;i<=26;i++)
  65. if(cc[i].num==1)
  66. b[cc[i].pos]=true;
  67. dfs(0);
  68. out<<ans<<endl;
  69. return 0;
  70. }