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 }
时间: 2024-10-11 12:02:02