[bzoj3360] [Usaco2004 Jan]算二十四

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[bzoj3360] [Usaco2004 Jan]算二十四相关的知识,希望对你有一定的参考价值。

  O(3^9)枚举符号。。

  成功垫底QAQ...幸好没破坏这题100%的AC率。。

技术分享
 1 #include<cstdio>
 2 #include<iostream>
 3 #include<cstring>
 4 using namespace std;
 5 int l[11],r[11];
 6 int fh[11],num[11],a[11];
 7 int i,j,k,n,m,ans;
 8  
 9 int ra;char rx;
10 inline int read(){
11     rx=getchar(),ra=0;
12     while(rx<0||rx>9)rx=getchar();
13     while(rx>=0&&rx<=9)ra*=10,ra+=rx-48,rx=getchar();return ra;
14 }
15 inline int calc(){
16     int i,j,k;
17     for(i=1;i<=n;i++)l[i]=r[i]=i;
18     for(i=1;i<n;i++){
19         for(j=i;fh[j]==3;j++);
20         for(k=i;k<=j;k++)l[k]=i,r[k]=j;
21         i=j;
22     }
23     for(i=1;i<=n;i=r[i]+1)
24         for(j=l[i]+1,num[r[i]]=a[i];j<=r[i];j++)num[r[i]]*=a[j];
25     int now=0;
26     for(i=1;i<=n;i++)if(i==r[i])
27         if(l[i]==1||fh[l[i]-1]==1)now+=num[i];else now-=num[i];
28     return now;
29 }
30 void dfs(int dep){
31     if(dep==n){
32         if(calc()==24)ans++;
33         return;
34     }
35     fh[dep]=1,dfs(dep+1),
36     fh[dep]=2,dfs(dep+1),
37     fh[dep]=3,dfs(dep+1);
38 }
39 int main(){
40     n=read();for(i=1;i<=n;i++)a[i]=read();
41     dfs(1);
42     printf("%d\\n",ans);
43 }
View Code

 

以上是关于[bzoj3360] [Usaco2004 Jan]算二十四的主要内容,如果未能解决你的问题,请参考以下文章

BZOJ 3361 [Usaco2004 Jan]培根距离

bzoj 4506: [Usaco2016 Jan]Fort Moo

[BZOJ1677][Usaco2005 Jan]Sumsets 求和

bzoj 1783: [Usaco2010 Jan]Taking Turns

BZOJ 3887[Usaco2015 Jan]Grass Cownoisseur

线段树 BZOJ3888 [Usaco2015 Jan]Stampede