问题描述

n队伍比赛,每两支队伍比赛一次,平1胜3负0.

给出队伍的最终得分,求多少种可能的分数表。

输入格式

第一行包含一个正整数n,队伍的个数。第二行包含n个非负整数,即每支队伍的得分。

输出格式

输出仅一行,即可能的分数表数目。保证至少存在一个可能的分数表。

样例输入

6

5 6 7 7 8 8

样例输出

121

数据范围

N<=8

解析

这么小的范围肯定是搜索啊。状态即为当前比赛是哪两支队伍在进行,搜索比分表的上三角区域(不包括对角线)。当搜索到第n行时,如果满足要求即可让答案加1。但是我们需要几个剪枝。

  • 如果当前某一方加分后超过最终分数,可以剪枝。
  • 如果某一方即使后面的比赛全赢也无法到达最终分数,可以剪枝。
  • 如果当前是某个人的最后一场比赛,可以直接推出结果。

然后就跑过去了。

代码

#include <iostream>
#include <cstdio>
#define N 10
using namespace std;
int n,i,s[N],a[N],ans;
int read()
{
char c=getchar();
int w=0;
while(c<'0'||c>'9') c=getchar();
while(c<='9'&&c>='0'){
w=w*10+c-'0';
c=getchar();
}
return w;
}
bool check()
{
for(int i=1;i<=n;i++){
if(s[i]!=a[i]) return 0;
}
return 1;
}
void dfs(int x,int y)
{
if(x==n){
if(check()) ans++;
return;
}
if(a[x]+3*(n-y+1)<s[x]) return;
if(y==n){
if(s[x]-a[x]==1){
a[x]++;a[y]++;
dfs(x+1,x+2);
a[x]--;a[y]--;
}
else if(s[x]-a[x]==0||s[x]-a[x]==3){
int tmpx=a[x],tmpy=a[y];
a[y]+=3-(s[x]-a[x]);
a[x]=s[x];
dfs(x+1,x+2);
a[x]=tmpx,a[y]=tmpy;
}
return;
}
if(a[x]+1<=s[x]&&a[y]+1<=s[y]){
a[x]++;a[y]++;
dfs(x,y+1);
a[x]--;a[y]--;
}
if(a[x]+3<=s[x]){
a[x]+=3;
dfs(x,y+1);
a[x]-=3;
}
if(a[y]+3<=s[y]){
a[y]+=3;
dfs(x,y+1);
a[y]-=3;
}
}
int main()
{
n=read();
for(i=1;i<=n;i++) s[i]=read();
dfs(1,2);
cout<<ans<<endl;
return 0;
}

[洛谷P3145] CQOI2009 循环赛的更多相关文章

  1. 洛谷 P1627 [CQOI2009]中位数 解题报告

    P1627 [CQOI2009]中位数 题目描述 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 输入输出格式 输入格式 ...

  2. 洛谷 P3155 [CQOI2009]叶子的染色 解题报告

    P3155 [CQOI2009]叶子的染色 题目描述 给一棵m个结点的无根树,你可以选择一个度数大于1的结点作为根,然后给一些结点(根.内部结点和叶子均可)着以黑色或白色.你的着色方案应该保证根结点到 ...

  3. 洛谷P3145 [USACO16OPEN]分割田地Splitting the Field

    P3145 [USACO16OPEN]分割田地Splitting the Field 题目描述 Farmer John's NN cows (3 \leq N \leq 50,0003≤N≤50,00 ...

  4. 洛谷——P1627 [CQOI2009]中位数

    P1627 [CQOI2009]中位数 给出1~n的一个排列,统计该排列有多少个长度为奇数的连续子序列的中位数是b.中位数是指把所有元素从小到大排列后,位于中间的数. 中位数的题目有关统计的话,可以转 ...

  5. [洛谷P3153] [CQOI2009]跳舞

    题目大意:有n个女生,n个男生,每次一男一女跳舞.同一队只会跳一次.每个男孩最多只愿意和k个不喜欢的女孩跳舞,女孩同理.问舞会最多能有几首舞曲? 题解:二分跳了多少次舞,每次重建图,建超级原点和汇点, ...

  6. 【BZOJ1306】[CQOI2009]循环赛(搜索)

    [BZOJ1306][CQOI2009]循环赛(搜索) 题面 BZOJ 洛谷 题解 爆搜一下,\(hash\)记录是否已经考虑过这个状态,记忆化解决问题. #include<iostream&g ...

  7. 洛谷P1309 瑞士轮(归并排序)

    To 洛谷.1309 瑞士轮 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公平, ...

  8. 洛谷1640 bzoj1854游戏 匈牙利就是又短又快

    bzoj炸了,靠离线版题目做了两道(过过样例什么的还是轻松的)但是交不了,正巧洛谷有个"大牛分站",就转回洛谷做题了 水题先行,一道傻逼匈牙利 其实本来的思路是搜索然后发现写出来类 ...

  9. 洛谷P1352 codevs1380 没有上司的舞会——S.B.S.

    没有上司的舞会  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond       题目描述 Description Ural大学有N个职员,编号为1~N.他们有 ...

随机推荐

  1. ORACLE查询隐含参数

    查询隐含参数:col name for a30col VALUE for a10col DESCRIB for a40set lines 200SELECT x.ksppinm NAME, y.ksp ...

  2. LinkedTransferQueue 源码分析

    LinkedTransferQueue LinkedTransferQueue 能解决什么问题?什么时候使用 LinkedTransferQueue? 1)LinkedTransferQueue 是基 ...

  3. activiti 流程发起人控制

    最近做activiti流程发起人的控制,最开始的想法是新建一张表 ,通过控制流程定义id与发起人id进行控制,如果这样每次发布新的流程就必须 重新设置流程发起人,因为通过流程定义不能获取流程模型id, ...

  4. python-笔记(二)数据类型

    一.数据类型是什么鬼? 计算机顾名思义就是可以做数学计算的机器,因此,计算机程序理所当然地可以处理各种数值.但是,计算机能处理的远不止数值,还可以处理文本.图形.音频.视频.网页等各种各样的数据,不同 ...

  5. spring的后置处理器——BeanPostProcessor以及spring的生命周期

    后置处理器的调用时机 BeanPostProcessor是spring提供的接口,它有两个方法——postProcessBeforeInitialization.postProcessAfterIni ...

  6. Powershell 音乐播放

    目录 目录 前言 systemwindowsmediamediaplayer 前言 Powershell抱着.NET的大腿,与生俱来了许多非常便捷的功能.例如--音乐的自动播放 system.wind ...

  7. oracle linux 7使用udev绑盘操作

    参考:Oracle Linux 7: Udev rule for ASM Cannot Place the ASM Disk in a Directory under /dev (Doc ID 221 ...

  8. python基础-8迭代器(iter)和生成器(yield)

    一 生成器 从Python2.2起,生成器提供了一种简洁的方式帮助返回列表元素的函数来完成简单和有效的代码. 它基于yield指令,允许停止函数并立即返回结果.此函数保存其执行上下文,如果需要,可立即 ...

  9. Vue 基础 day06 webpack 3.x 结合vue

    在普通页面使用 render 函数渲染组件 var login = { template: '<h3>login</h3>' } var vm = new Vue({ // c ...

  10. Sql Server 之游标

    一般来说,我们通过SQL一般是面向集合进行数据操作,但是游标提供给我们更加强大的功能可以对数据集合进行逐行遍历有选择性的操作处理.当然游标也有其不可避免的缺陷就是:低效和复杂.所以一般正常的操作处理不 ...