88pts,TLE,萌新求助

P2540 [NOIP2015 提高组] 斗地主 加强版

@[kobe_offical](/user/540929) 牢大又是你
by zyy66666 @ 2023-07-24 15:06:51


第125行 ```cpp cout<<; ``` 改 ```cpp scanf("",&); ``` 或 ```cpp cout.tie(false); ``` 提速
by Weizhuo_Zhao @ 2023-07-24 15:07:22


@[zyy66666](/user/406811) 我回来了
by kobe_offical @ 2023-07-24 15:14:32


@[kobe_offical](/user/540929) 你剪枝剪的不够怎么过啊。
by fengziyi @ 2023-07-24 18:49:58


@[fengziyi](/user/540226) 还要怎么剪啊qwq
by kobe_offical @ 2023-07-24 18:53:28


@[kobe_offical](/user/540929) 看题解不会么
by fengziyi @ 2023-07-24 19:02:37


@[fengziyi](/user/540226) 行吧
by kobe_offical @ 2023-07-24 19:05:27


@[kobe_offical](/user/540929) 你好
by KobeBryantOfficial @ 2023-07-25 07:44:16


@[kobe_offical](/user/540929) ```cpp #include<bits/stdc++.h> using namespace std; int ans,b[30],T,n; int dfn,lim = 6e6 + 7; void dfs(int x){ if(x>=ans || ++dfn >= lim) return; int k=0; for(int i=3;i<=14;i++){ if(b[i]<1) k=0; else { k++; if(k>=5){ for(int j=i;j>=i-k+1;j--)b[j]--; dfs(x+1); for(int j=i;j>=i-k+1;j--)b[j]++; } } } k=0; for(int i=3;i<=14;i++){ if(b[i]<2) k=0; else { k++; if(k>=3){ for(int j=i;j>=i-k+1;j--)b[j]-=2; dfs(x+1); for(int j=i;j>=i-k+1;j--)b[j]+=2; } } } k=0; for(int i=3;i<=14;i++){ if(b[i]<3) k=0; else { k++; if(k>=2){ for(int j=i;j>=i-k+1;j--)b[j]-=3; dfs(x+1); for(int j=i;j>=i-k+1;j--)b[j]+=3; } } } for(int i=2;i<=14;i++){ if(b[i]<=3){ if(b[i]<=2)continue; b[i]-=3; for(int j=2;j<=15;j++){ if(b[j]<1||i==j)continue; b[j]--; dfs(x+1); b[j]++; } //带单 for(int j=2;j<=14;j++){ if(b[j]<2||i==j)continue; b[j]-=2; dfs(x+1); b[j]+=2; } //double b[i]+=3; } else { b[i]-=3; for(int j=2;j<=15;j++){ if(b[j]<1||i==j)continue; b[j]--; dfs(x+1); b[j]++; } //带单 for(int j=2;j<=14;j++){ if(b[j]<2||i==j)continue; b[j]-=2; dfs(x+1); b[j]+=2; } //double b[i]+=3; b[i]-=4; for(int j=2;j<=15;j++){ if(b[j]<1)continue; b[j]--; for(int k=2;k<=15;k++){ if(b[k]<1)continue; b[k]--; dfs(x+1); b[k]++; } //带单 b[j]++; } for(int j=2;j<=14;j++){ if(b[j]<2)continue; b[j]-=2; for(int k=2;k<=14;k++){ if(b[k]<2)continue; b[k]-=2; dfs(x+1); b[k]+=2; } b[j]+=2; } b[i]+=4; } } for(int i=2;i<=15;i++)if(b[i]!=0)x++; ans=min(ans,x); } void read(int &x){ int f=1;x=0;char s=getchar(); while(s<'0'||s>'9') {if(s=='-') f=-1;s=getchar();} while(s>='0'&&s<='9') {x=x*10+s-'0';s=getchar();} x*=f; } int main(){ cin>>T>>n; lim /= T; while(T--){ dfn = 0; ans=114514; memset(b,0,sizeof(b)); for(int i=1;i<=n;i++){ int a,useless; read(a); read(useless); if(a==1)b[14]++; else if(a==0)b[15]++; else b[a]++; } dfs(0); cout<<ans<<endl; } return 0; } ```
by Snowy_Fujisaki @ 2023-08-17 08:14:39


|