bzoj1306 [CQOI2009]match循环赛
来源:互联网 发布:淘宝新店手机号码采集 编辑:程序博客网 时间:2024/06/10 21:50
n支队伍进行循环赛,胜者得3分,平各得1分,负得0分.现给出各队伍最终分数,求可能符合的胜负情况数.(n<=8)
这个没法状压,只能爆搜了吧。。
主要剪枝有这几个:
某个队伍剩下全赢都达不到分数或已经超过分数剪枝.
当枚举到某个队伍的最后一场比赛时 可通过与结果的差值直接确定这一场情况
如果差3,1,0分就直接确定,差2分或3分以上直接剪枝。
差不多8s刚好卡过去。。
剪枝这个东西 真的就是玄学吧。。
#include<bits/stdc++.h>#define LL long long#define clr(x,i) memset(x,i,sizeof(x))using namespace std;const int N=10;int n,a[N],sc[N],st[4]={3,1,0,0},ans=0;void dfs(int u,int v){if( sc[u]>a[u] || sc[v]>a[v] )return;if(sc[u]+(n-v+1)*3<a[u])return;if(u==n){ans++;return;}if(v==n){int dt=a[u]-sc[u];if( dt==2 || dt>3 )return;sc[u]+=dt;sc[v]+=st[dt];dfs(u+1,u+2);sc[u]-=dt;sc[v]-=st[dt];}else{sc[u]+=3;dfs(u,v+1);sc[u]-=3;sc[v]+=3;dfs(u,v+1);sc[v]-=3;sc[u]+=1;sc[v]+=1;dfs(u,v+1);sc[u]-=1;sc[v]-=1;}}int main(){scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);dfs(1,2);printf("%d\n",ans);return 0;}
阅读全文
0 0
- bzoj1306: [CQOI2009]match循环赛
- bzoj1306 [CQOI2009]match循环赛
- 1306: [CQOI2009]match循环赛
- BZOJ 1306: [CQOI2009]match循环赛
- bzoj 1306 [CQOI2009]match循环赛
- BZOJ P1306 [CQOI2009]match循环赛
- BZOJ 1306: [CQOI2009]match循环赛 爆搜,剪枝
- 【BZOJ】【P1306】【CQOI2009】【match循环赛】【题解】【搜索+剪枝】
- [CQOI2009] 循环赛 - 暴力出奇迹
- bzoj1306
- JZOJ 4.15 1110——CQOI2009循环赛【dfs】【hash判重】
- 循环赛
- 【CQOI2009】跳舞
- 【CQOI2009】中位数
- CQOI2009中位数
- 循环赛问题
- 循环赛算法
- 循环赛日程表
- 1002. 写出这个数 (20)
- 第13期 《进击之路》 12月刊
- 简单的心形输出
- bootstrap使用
- PHP程序员进阶学习书籍参考指南
- bzoj1306 [CQOI2009]match循环赛
- bzoj 2989: 数列&4170: 极光
- C#学习总结(5)——倒计时功能实现
- C++类模板 template <class T>
- java实现微信退款
- Linux signals(一)理论、C语言捕获信号并处理
- Java学习 java -- 面向对象
- SQL Server2008 学习之(十八) :使用.NET 访问SQL Server
- GIL解释器锁