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


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

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


#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<map>
using namespace std;
#define maxn 12
#define llg long long
#define md 1000000007
#define yyj(a) freopen(a".in","r",stdin),freopen(a".out","w",stdout);
llg n,m; map<llg,llg>f; bool cmp(llg a,llg b){return a<b;} struct node
{
llg a[maxn],len;
void px() {sort(a+,a+len+,cmp);}
llg hash()
{
llg tot=len,x=;
for (llg i=;i<=len;i++)
{
tot*=;
tot+=x*a[i];
}
//cout<<tot<<endl;
return tot;
}
}; llg ss(node w,llg x,llg res,llg up);
llg dfs(node e); llg ss(node w,llg x,llg res,llg up)
{
llg ans=;
if (x>up)
{
if (res==) ans=dfs(w);
return ans;
}
if (res>=)
{
ans+=ss(w,x+,res-,up); ans%=md;
}
if (res>= && w.a[x]>=)
{
w.a[x]--;
ans+=ss(w,x+,res-,up);
ans%=md;
w.a[x]++;
}
if (w.a[x]>=)
{
w.a[x]-=;
ans+=ss(w,x+,res,up);
ans%=md;
w.a[x]+=;
}
return ans%md;
} llg dfs(node e)
{
e.px();
llg val=e.hash();
if (f[val]!=) return max((llg),f[e.hash()]);
node ne=e;
for (llg i=;i<e.len;i++) ne.a[i]=ne.a[i+];
ne.len=e.len-; ne.a[e.len]=;
f[val]=ss(ne,,e.a[],e.len-)%md;
if (f[val]==) f[val]=-;
// cout<<e.hash()<<endl;
return max((llg),f[val]);
} int main()
{
yyj("match");
cin>>n;
node w; w.len=n;
memset(w.a,,sizeof(w.a));
for (llg i=;i<=n;i++) scanf("%lld",&w.a[i]);
w.px(); f[]=;
dfs(w);
cout<<max((llg),f[w.hash()]);
return ;
}

【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. GUI常用对话框4

    %普通对话框 dialog %单击时会关闭当前窗口 %自定义 关于对话框 点击确定 关闭 h = dialog( ]); uicontrol( ], ... 'string','确定','Callba ...

  2. Step3 SQL Server 通过备份文件初始化复制

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 搭建过程(Process) 注意事项(Attention) 疑问(Questions) 参考文 ...

  3. 初学delphi

    今天女朋友的一门课,要求用delphi 软件编程,内容是一个计算器.当然,这个工作肯定是落在我的头上了. 这个软件是我第一次使用,边自学边进行代码编写,在n多次修改完善之后,终于成形.功能不是很多,跟 ...

  4. 基于spring框架的jt项目分页查询知识点(二)

    知识点汇总 1. 日志记录方法 private Logger log= Logger.getLogger(SysLogServiceImpl.class.getName()); 记录SysLogSer ...

  5. 八大排序算法之七—堆排序(Heap Sort)

    堆排序是一种树形选择排序,是对直接选择排序的有效改进. 基本思想: 堆的定义如下:具有n个元素的序列(k1,k2,...,kn),当且仅当满足 时称之为堆.由堆的定义可以看出,堆顶元素(即第一个元素) ...

  6. Camera2点击对焦实现2

    https://www.aliyun.com/jiaocheng/22218.html 阿里云 >  教程中心   >  android教程 >  Camera2点击对焦实现 Cam ...

  7. MMU工作原理(转)

    源: MMU工作原理

  8. django 函数装饰器 变为 类装饰器

    aaa  

  9. Django Form&ModelForm

    ModelForm: 首先导入所需模块 from django.forms import ModelFormfrom django.forms import widgets as form_widge ...

  10. 一、初始PS软件

     PS的介绍 Adope Photoshop,简称“PS”,是由Adope Systems开发和发行的图像处理软件. Photoshop主要处理以像素所构成的数字图像,使用其众多的编修与绘图工具,可以 ...