[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 }
以上是关于[bzoj3360] [Usaco2004 Jan]算二十四的主要内容,如果未能解决你的问题,请参考以下文章
bzoj 4506: [Usaco2016 Jan]Fort Moo
[BZOJ1677][Usaco2005 Jan]Sumsets 求和
bzoj 1783: [Usaco2010 Jan]Taking Turns