问题描述

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 临时表空间管理

     临时表空间和临时段 临时表空间用于存放排序.临时表等数据,其信息不需要REDO,因此临时表的DML操作往往比普通表产生的REDO少很多.临时表数据变化不产生REDO,UNDO数据变化产生REDO.临 ...

  2. CentOS7 日常操作 2

    常用命令 文件与目录操作 命令 解析 cd /home 进入 ‘/home’ 目录 cd .. 返回上一级目录 cd ../.. 返回上两级目录 cd - 返回上次所在目录 cp file1 file ...

  3. python3 -m pip install django, -m参数

    python -m xxx.py 作用是:把xxx.py文件当做模块启动但是我一直不明白当做模块启动到底有什么用.python xxx.py和python -m xxx.py有什么区别! 自问自答: ...

  4. 使用Dockerfile封装Django镜像

    第一步: 在/opt下建立了docker目录,下载一个django-2.1.7的源码包, touch Dockerfile和run.sh,其中run.sh是用来执行Django的bash脚本,Dock ...

  5. debian sftp/ssh

    检查是否安装poenssh dpkg --get-selections | grep openssh 如下表示已经安装

  6. MVC 源码系列之控制器执行(一)

    控制器的执行 之前说了Controller的激活,现在看一个激活Controller之后控制器内部的主要实现. public interface IController { void Execute( ...

  7. 【Unity Shader】---基础光照

    一.[标准光照模型]1.自发光emissve:描述一个表面本身会发散多少光.在没有使用全局光照时,这些自发光是不会真正照亮周围物体. 自发光就是直接由发光体发射进入摄像机,不经过任何反射,在标准光照模 ...

  8. 前端 CSS的选择器 基本选择器

    基本选择器包括: 标签选择器 类选择器 ID选择器 通用选择器 标签选择器 就是通过标签名来选择元素: 选中p标签 <!DOCTYPE html> <html lang=" ...

  9. [BZOJ2829] 信用卡 (凸包)

    [BZOJ2829] 信用卡 (凸包) 题面 信用卡是一个矩形,唯四个角做了圆滑处理,使他们都是与矩形两边相切的1/4园,如下图所示,现在平面上有一些规格相同的信用卡,试求其凸包的周长.注意凸包未必是 ...

  10. AtCoder Beginner Contest 133 -D — Rain Flows into Dams

    (https://atcoder.jp/contests/abc133/tasks/abc133_d) 思路:每座山为2Xi,每个坝为Ai.已知Ai,求出2Xi. 根据已知的X1,则可分别求出X2-n ...