码迷,mamicode.com
首页 > 其他好文 > 详细

【搜索】【剪枝】bzoj1306 [CQOI2009]match循环赛

时间:2014-09-06 16:05:33      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   io   for   div   sp   log   on   

dfs+剪枝*4(通过得很勉强):

1、只枚举一半的比赛,另一半直接得出。
2、处理前缀和,若大于目标得分则剪枝
3、前缀和加上若接下来全胜的得分 仍小于 目标得分,则剪枝。
4、枚举到每个人的最后一场比赛时直接用 目标得分-前缀和 计算出最后一场的应得分。
Code还是很简单的:
#include<cstdio>
using namespace std;
const int f[]={3,1,0,0};
int n,a[9],ans,Pre[9];
void dfs(int x,int y)
{
    if(Pre[x]>a[x])return;
    if(Pre[x]+(n-y+1)*3<a[x])return;
    if(x==n){ans++;return;}
    if(y==n)
      {
          int tmp=a[x]-Pre[x];
          if(tmp==2)return;
          Pre[y]+=f[tmp];
        dfs(x+1,x+2);
          Pre[y]-=f[tmp];
      }else{
    Pre[x]+=3;dfs(x,y+1);Pre[x]-=3;
    Pre[y]+=3;dfs(x,y+1);Pre[y]-=3;
    Pre[x]++;Pre[y]++;dfs(x,y+1);Pre[x]--;Pre[y]--;}
}
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;
}

 

【搜索】【剪枝】bzoj1306 [CQOI2009]match循环赛

标签:style   blog   color   io   for   div   sp   log   on   

原文地址:http://www.cnblogs.com/autsky-jadek/p/3959466.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!