题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=3139


  可以发现,答案之和得分的序列有关,而且和序列中每个元素的顺序无关。考虑HASH所有的状态,记忆化搜索即可。

  (取模出问题+没有判断是否访问,即答案为0的状态有的可能已经访问过了)调了一个多小时。


  1. #include<iostream>
  2. #include<cstdio>
  3. #include<algorithm>
  4. #include<vector>
  5. #include<cstdlib>
  6. #include<cmath>
  7. #include<cstring>
  8. #include<map>
  9. using namespace std;
  10. #define maxn 12
  11. #define llg long long
  12. #define md 1000000007
  13. #define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
  14. llg n,m;
  15.  
  16. map<llg,llg>f;
  17.  
  18. bool cmp(llg a,llg b){return a<b;}
  19.  
  20. struct node
  21. {
  22. llg a[maxn],len;
  23. void px() {sort(a+,a+len+,cmp);}
  24. llg hash()
  25. {
  26. llg tot=len,x=;
  27. for (llg i=;i<=len;i++)
  28. {
  29. tot*=;
  30. tot+=x*a[i];
  31. }
  32. //cout<<tot<<endl;
  33. return tot;
  34. }
  35. };
  36.  
  37. llg ss(node w,llg x,llg res,llg up);
  38. llg dfs(node e);
  39.  
  40. llg ss(node w,llg x,llg res,llg up)
  41. {
  42. llg ans=;
  43. if (x>up)
  44. {
  45. if (res==) ans=dfs(w);
  46. return ans;
  47. }
  48. if (res>=)
  49. {
  50. ans+=ss(w,x+,res-,up); ans%=md;
  51. }
  52. if (res>= && w.a[x]>=)
  53. {
  54. w.a[x]--;
  55. ans+=ss(w,x+,res-,up);
  56. ans%=md;
  57. w.a[x]++;
  58. }
  59. if (w.a[x]>=)
  60. {
  61. w.a[x]-=;
  62. ans+=ss(w,x+,res,up);
  63. ans%=md;
  64. w.a[x]+=;
  65. }
  66. return ans%md;
  67. }
  68.  
  69. llg dfs(node e)
  70. {
  71. e.px();
  72. llg val=e.hash();
  73. if (f[val]!=) return max((llg),f[e.hash()]);
  74. node ne=e;
  75. for (llg i=;i<e.len;i++) ne.a[i]=ne.a[i+];
  76. ne.len=e.len-; ne.a[e.len]=;
  77. f[val]=ss(ne,,e.a[],e.len-)%md;
  78. if (f[val]==) f[val]=-;
  79. // cout<<e.hash()<<endl;
  80. return max((llg),f[val]);
  81. }
  82.  
  83. int main()
  84. {
  85. yyj("match");
  86. cin>>n;
  87. node w; w.len=n;
  88. memset(w.a,,sizeof(w.a));
  89. for (llg i=;i<=n;i++) scanf("%lld",&w.a[i]);
  90. w.px(); f[]=;
  91. dfs(w);
  92. cout<<max((llg),f[w.hash()]);
  93. return ;
  94. }

【BZOJ】3139: [Hnoi2013]比赛的更多相关文章

  1. bzoj 3139: [Hnoi2013]比赛

    Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支球队各得 ...

  2. BZOJ.3139.[HNOI2013]比赛(搜索 Hash)

    题目链接 不会搜索了.. DFS()中两个参数,枚举每两个队伍的比赛结果(分配当前队伍的分数). 可以发现方案数量与具体哪只球队得了多少分无关,只与当前比赛的队伍数量和得分序列的组成有关.可以记忆化搜 ...

  3. 3139:[HNOI2013]比赛 - BZOJ

    题目描述 Description 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联赛共N只队伍参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局,两支 ...

  4. [BZOJ3139][HNOI2013]比赛(搜索)

    3139: [Hnoi2013]比赛 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1439  Solved: 719[Submit][Status] ...

  5. 【BZOJ3139】[HNOI2013]比赛(搜索)

    [BZOJ3139][HNOI2013]比赛(搜索) 题面 BZOJ 洛谷 题解 双倍经验

  6. [HNOI2013]比赛 (用Hash实现记忆化搜索)

    [HNOI2013]比赛 题目描述 沫沫非常喜欢看足球赛,但因为沉迷于射箭游戏,错过了最近的一次足球联赛.此次联 赛共N支球队参加,比赛规则如下: (1) 每两支球队之间踢一场比赛. (2) 若平局, ...

  7. [HNOI2013]比赛 搜索

    [HNOI2013]比赛 搜索. LG传送门 直接暴力有60,考场上写的60,结果挂成40. 考虑在暴力的同时加个记忆化,把剩下的球队数和每支球队的得分情况hash一下,每次搜到还剩\(t\)个队的时 ...

  8. 【题解】HNOI2013比赛

    [题解][P3230 HNOI2013]比赛 将得分的序列化成样例给的那种表格,发现一行和一列是同时确定的.这个表格之前是正方形的,后来长宽都减去一,还是正方形.问题形式是递归的.这就启示我们可以把这 ...

  9. BZOJ1306 [CQOI2009]match循环赛/BZOJ3139 [Hnoi2013]比赛[dfs剪枝+细节题]

    地址 看数据范围很明显的搜索题,暴力dfs是枚举按顺序每一场比赛的胜败情况到底,合法就累计.$O(3^{n*(n-1)/2})$.n到10的时候比较大,考虑剪枝. 本人比较菜所以关键性的剪枝没想出来, ...

随机推荐

  1. pytest+request 接口自动化测试

    1.安装python3brew update brew install pyenv 然后在 .bash_profile 文件中添加 eval “$(pyenv init -)” pyenv insta ...

  2. P2800 又上锁妖塔

    P2800 又上锁妖塔  [温馨提示]使用仙术时飞过一层塔不花费时间,若爬过去,该层有多高,就要花费多长时间     我们可以用 f [ i ] 表示到达第 i 层时所用最短时间   到达第 i 层可 ...

  3. Solr创建核的方法

    Solr创建核的方法,简单粗暴 就是进入到solrhome中进行复制粘贴这个collection2 然后进入到conf中,修改一下name 然后从新启动tomcat

  4. ELK学习笔记之F5 DNS可视化让DNS运维更安全更高效-F5 ELK可视化方案系列(3)

    0x00 概述 此文力求比较详细的解释DNS可视化所能带来的场景意义,无论是运维.还是DNS安全.建议仔细看完下图之后的大篇文字段落,希望能引发您的一些思考. 在“F5利用Elastic stack( ...

  5. crontab命令的使用方法

    crontab命令常见于Unix和Linux的操作系统之中,用于设置周期性被执行的指令.该命令从标准输入设备读取指令,并将其存放于"crontab"文件中,以供之后读取和执行. 在 ...

  6. 《学习OpenCV3》第14章课后习题

    1.在一条含有 N 个点的封闭轮廓中,我们可以通过比较每个点与其它点的距离,找出最外层的点.(这个翻译有问题,而且这个问题是实际问题) a.这样一个算法的复杂度是多少? b.怎样用更快的速度完成这个任 ...

  7. Codeforces 888G Xor-MST - 分治 - 贪心 - Trie

    题目传送门 这是一条通往vjudge的高速公路 这是一条通往Codeforces的高速公路 题目大意 给定一个$n$阶完全图,每个点有一个权值$a_{i}$,边$(i, j)$的权值是$(a_{i}\ ...

  8. bzoj 4591 超能粒子炮·改 - Lucas

    Description 曾经发明了脑洞治疗仪&超能粒子炮的发明家SHTSC又公开了他的新发明:超能粒子炮·改--一种可以发射威力更加 强大的粒子流的神秘装置.超能粒子炮·改相比超能粒子炮,在威 ...

  9. How to Rerun Failed Tests in JUnit?

    该帖转自其他出处 Sometimes due to some temporarily problems such as connection problems, server problems, br ...

  10. html的初了解(更新中···)

    (注:在学习时要养成一个良好的习惯,即每次写完都随手保存,快捷键为ctrl+s.即每次写完都随手点一下ctrl+s.) html是万维网的核心语言.标准通用标记语言下的一个应用超文本标记语言. 网页的 ...