为什么这个代码第2/4/5个点会TLE???求神犇

P2727 [USACO3.2] 01串 Stringsobits

这是暴力的写法。
by lizongru @ 2017-05-21 22:19:43


@[lizongru](/space/show?uid=20865) 谁把标题打的搜索?! ???!!! 我正着反着搜都TLE了?! 正着搜: ```cpp cnt=0; void dfs(ll step,bool flag,ll num){ a[step]=flag; if(num>k)return ; if(step==n){ cnt++; if(cnt==p){ for(int i=1;i<=n;i++) printf("%d",a[i]); exit(0); } return ; } dfs(step+1,0,num); dfs(step+1,1,num+1); } int main( ){ n=read();k=read();p=read(); for(int i=0;i<=k;i++) cnt+=C(n,i); dfs(1,0,0); dfs(1,1,1); return 0; } ``` 反着搜: ```cpp cnt=1; void dfs(ll step,bool flag,ll num){ a[step]=flag; if(num>k)return ; if(step==n){ cnt--; if(cnt==p){ for(int i=1;i<=n;i++) printf("%d",a[i]); exit(0); } return ; } dfs(step+1,1,num+1); dfs(step+1,0,num); } ll C(int x,int y){ ll sum_x=1,sum_y=1,sum_x_y=1,j=1; for(ll i=x-y+1;i<=x;i++){ sum_x*=i; if(sum_x%j==0){ sum_x/=j; j++; if(j==y+1)break; } } return sum_x;//还害得我用排列组合公式 } int main( ){ n=read();k=read();p=read(); for(int i=0;i<=k;i++) cnt+=C(n,i); dfs(1,1,1); dfs(1,0,0); return 0; } //QAQ ```
by ABCDXYZ @ 2017-06-29 17:05:36


我爆搜过了啊
by Bzy_temp @ 2017-09-05 21:51:29


|